【问题标题】:nginx proxy_pass is setting port in responsenginx proxy_pass 正在设置端口作为响应
【发布时间】:2015-10-07 21:55:56
【问题描述】:

我有一个类似的 Nginx 配置:

server {
    listen 80;
    listen 443;
    server_name api.mysite.dev;

    location / {

        proxy_set_header Host "api.mysite.dev";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass  $scheme://127.0.0.1:8001;
    }

}

server {
    listen 80;
    listen 443;
    server_name mysite.dev www.mysite.dev;

    # Forward all /api/ requests ti api.mysite.dev
    # sadly need to keep this around for backwards compatibility
    location /api/ {
        proxy_set_header Host "api.mysite.dev";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass $scheme://127.0.0.1:8001/;

    }
    # The proxy_pass here ends up putting the port (8002) in the response URL.
    location / {
        proxy_set_header Host "www.mysite.dev";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass  $scheme://127.0.0.1:8002;
    }
}

所以,正如评论中所说,当我请求 www.mysite.dev 时,我的浏览器被转发到 www.mysite.dev:8002。 有什么想法我在这里做错了吗?

提前致谢!

【问题讨论】:

    标签: nginx proxy http-headers reverse-proxy


    【解决方案1】:

    您必须设置以下选项:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    

    这是一个有效的示例:

        server {
            listen 80;
            listen 443;
            server_name api.mysite.dev;
    
            location /api/ {
                proxy_pass http://127.0.0.1:8001/;
                proxy_redirect off;
    
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header Host "api.mysite.dev";
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
            }
        }
    

    【讨论】:

    • 遗憾的是,这并不能解决问题。更多信息:浏览器被重定向到 Host 标头中的任何内容。因此,如果我将其设置为“www”,并请求 www.mysite.dev/some/resource,浏览器将被发送到 www:8002/some/resource。
    • 我刚刚注意到您缺少这个我一直用于反向代理的标头 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    • 所以,这大部分是正确的,所以我编辑了你的答案。添加“proxy_set_header X-Forwarded-Host $host;”最终为我解决了这个问题。
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2021-09-06
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多