nginx proxy_pass正在响应中设置端口

时间:2015-10-07 21:55:56

标签: nginx proxy http-headers reverse-proxy

我的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。 我在这里做错了什么想法?

提前致谢!

1 个答案:

答案 0 :(得分:4)

你需要

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

这是一个有效的示例:         服务器{             听80;             听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;
        }
    }