我的问题是非常相似的: nginx代理传递redirect忽略端口
我正在使用nginx 1.0.14。
我希望能够通过SSH隧道进入我的Django网站,所以我可以远程工作。 我已经在个人电脑上testing了一个简单的Django项目,使用非常简单的nginxconfiguration(starter,default)。 我隧道和redirect返回与端口号作为url的一部分。 所以我相信这不是一个Django的问题。 这主要是我的nginxconfiguration。
这是相关的部分。
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; }
那么,如果我ssh隧道会发生什么?
ssh -L 1111:192.168.1.165:80 username@server-address -N
然后打开浏览器http://localhost:1111 ,当我login时,或者做任何需要redirect的东西,我得到http:// localhost / forum / front-page而不是http:// localhost:1111 / froum /首页
这些链接是错误的,nginx会抱怨(从服务器端)他们不存在。
在内部,服务论坛运行在http://localhost:8000
我试过类似的东西
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;
第二个proxy_set_header显示了一些进展。 按submit ,我得到一个空白页,与原来的url( http:// localhost:1111 / post ,然后我再次看到相同的url)。
任何想法如何解决我的问题? 谢谢。
所以我想出了一个简单的解决scheme…作为我自己的答案…
proxy_set_header Host $host;
$host应该replace为$http_host ,尽pipe我不太清楚其中的含义。
您需要启用proxy_redirect它重写响应的主机头,以防止您面临的问题。 把它设置为默认值就可以了。