can you please open an issue in google code so it is tracked. I do not think there an issue with wsgi but there may be one with access.py
On Wednesday, 23 May 2012 21:03:04 UTC-5, Chris wrote: > > This seems like a problem in web2py or mod_wsgi -- or else I am confused. > Would appreciate any pointers from the experts. > > I'm running web2py 1.99.7 on a Red Hat (RHEL 6) server using Apache 2.2.15 > and mod_wsgi 3.3. This is all running on a small virtual server at Amazon > Web Services. > > Since I don't want to open that box up to the world, I have been using ssh > tunneling to allow processes on my local machine to connect to the AWS > machine as if that is my local host. > > That is done via sshe command lines that look like this: > > ssh -i hs-test-000001.pem -L *:55080:localhost:80 -N root@107.21.240.172 & > ssh -i hs-test-000001.pem -L *:55443:localhost:443 -N root@107.21.240.172& > > The -L option has ssh create a listener on local port 55080 and forward > all traffic to that port to IP address 107.21.240.172 / its localhost port > 80. The second command line is the same for port 443 (https). > > This works well. I can open a browser on my local machine, type > localhost:55080 in the address bar, and it does indeed connect with the > remote server and serve up the Welcome app. (The AWS machine -- Apache and > web2py -- function just as if the request came from that localhost. The > response is the same if I use a prompt on the AWS host and run 'curl > localhost:80'. It all checks out. So far so good. > > The problem has to do with how port numbers are interpreted on the AWS > machine. Browsing locally to http://localhost:55080 worked fine, but > https://localhost:55443 resulted in an error. After reading the error > dump file and putting a little debug code in applications / admin / models > / access.py, I could see the failure was caused by access.py trying to open > a local password file 'parameters_55443.py'. And indeed, when I copied the > existing parameters_443.py file and names the copy parameters_55443.py, > everything worked -- https://localhost:55443/admin brought up the admin > add as I had expected. > > I don't understand why the AWS web2py process would care about the port > number from the client machine that initiated the request. More than that, > I don't understand how web2py even knows what the port number from the > client is, since supposedly that is all handled in the ssh client side / > sshd server side process that ssh -L provides. > > To look further into this, I made a change in access.py to dump the entire > 'request' structure to the Apache error log and paged through this. The > port number 55443 shows up several times: > > -- 'HTTP_REFERER': 'https://localhost:55443/admin/default/site' > -- 'SERVER_SIGNATURE': '<address>Apache/2.2.15 (Red Hat) Server at > localhost Port 55443</address> > -- 'SERVER_PORT': '55443' > -- 'HTTP_HOST': 'localhost:55443' > -- 'mod_wsgi.application_group': 'ip-10-114-191-91.ec2.internal:55443| > > This is concerning because it means I may need to create new / redundant > parameters_*.py files for multiple port numbers on a production machine if > we use multiple port numbers in the ssh -L bridging. > > More than that, it makes me wonder if there is something wrong with > mod_wsgi or WSGI or how I have set them up -- and will this cause other > problems. > > Does it make sense that Apache and web2py would be aware of / use the port > number from the remote client when it is mapped to a local port? > > It seems like a bug to me. > > Thanks >