My problem is very similar to this: nginx proxy pass redirects ignore port
I am using nginx 1.0.14.
I want to be able to ssh-tunnel into my Django website, so I can work remotely. I've tested a simple Django project on my personal computer, with very simple nginx configuration (starter, default). I tunnel and redirection returns with port number as part of the url. So I am sure this is not a Django problem. It's mainly my nginx configuration.
Here is the relevant part.
server {
listen 80;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
# location other services go here
location ~ /forum/(.*)$ {
#rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
#rewrite ^(.*)$ http://localhost:8000/$1;
#rewrite ^/forum(.*)$ $1 break;
# the forum service runs as local, listens to 8000 port...
proxy_pass http://localhost:8000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
So what happen if I ssh-tunnel?
ssh -L 1111:192.168.1.165:80 username@server-address -N
then open the browser, http://localhost:1111
, and when I login, or do anything that requires redirection, I get http://localhost/forum/front-page instead of http://localhost:1111/froum/front-page
These links are wrong, nginx will complain (from the server side) they do not exist.
Internally, the service forum runs at http://localhost:8000
I've tried stuff like
proxy_set_header $host:$server_port; # or
proxy_set_header $proxy_host:$proxy_port; # or
proxy_set_header $host:$proxy_port; # or
rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
#rewrite ^/forum(.*)$ $1 break;
proxy_redirect http://localhost/ http://$host:$proxy_port;
The 2nd proxy_set_header shows a little progress. After pressing submit
, I get a blank page, with the original url (http://localhost:1111/post and then I see the same url again).
Any idea how to resolve my problem? Thanks.
Best Answer
So I came up with a simple solution...as my own answer...
$host
should be replaced with$http_host
, although I am not quite sure the meaning of either.