Nginx - 当隧道时,URL 重定向而不带端口号

Nginx - 当隧道时,URL 重定向而不带端口号

我的问题与此非常相似:nginx 代理传递重定向忽略端口

我正在使用 nginx 1.0.14。

我希望能够通过 ssh 隧道进入我的 Django 网站,这样我就可以远程工作了。我在个人电脑上测试了一个简单的 Django 项目,使用非常简单的 nginx 配置(starter,默认)。我建立隧道,重定向返回时将端口号作为 url 的一部分。所以我确信这不是 Django 的问题。这主要是我的 nginx 配置。

以下是相关部分。

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-tunnel 会发生什么情况?

ssh -L 1111:192.168.1.165:80 username@server-address -N

然后打开浏览器http://localhost:1111,当我登录或执行任何需要重定向的操作时,我得到http://localhost/forum/front-page代替 http://localhost:1111/fromum/front-page

这些链接是错误的,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,我得到一个空白页,其中包含原始网址(http://本地主机:1111/post然后我再次看到相同的网址)。

有办法解决我的问题吗?谢谢。

答案1

所以我想出了一个简单的解决方案......作为我自己的答案......

proxy_set_header Host $host;

$host应该替换为$http_host,尽管我不太清楚它们的含义。

答案2

您需要启用代理重定向它重写响应的主机标头以防止您遇到的问题。将其设置为默认值应该可以解决问题。

相关内容