nginx 上游不工作

nginx 上游不工作

upstream当代理服务器有多个主机名绑定同一端口

我在尝试配置时遇到了这个问题nginx(1.9.12-1~trusty)proxy_passWindows 服务器 2012主持人。

我自己也重复了同样的行为Windows 10机器。

在下面的配置中,所有主机名都指向同一台机器 IP。

请求有时有效

注意:我预计这是localhost:7778选择代理的时候。

http {
    upstream w {
        server test1:80;
        server test2:80;
        server localhost:7778;
    }

    server {
        listen       8001;
        server_name  localhost;

        location / {
            proxy_pass http://w;
        }
    }
}

请求总是不起作用

注:按照 Alexey 的指出进行编辑。

http {
    upstream w {
        server test1:80;
        server test2:80;
        # server localhost:7778;
    }

    server {
        listen       8001;
        server_name  localhost;

        location / {
            proxy_pass http://w;
        }
    }
}

请求始终有效

http {

    server {
        listen       8001;
        server_name  localhost;

        location / {
            proxy_pass http://test1:80;
        }
    }
}

或者

http {

    server {
        listen       8001;
        server_name  localhost;

        location / {
            proxy_pass http://test2:80;
        }
    }
}

或者

http {

    server {
        listen       8001;
        server_name  localhost;

        location / {
            proxy_pass http://localhost:7778;
        }
    }
}

有没有解决的办法?

答案1

当你使用proxy_passproxy_set_header指令,nginx 将使用一些默认标头。大多数情况下,这是您想要的,或者至少是无害的,但在这种情况下,您必须手动设置它们。

当你写入 时proxy_pass http://w,nginx 将设置proxy_set_header Host w。如果你需要另一个Host标头,则应明确设置它。最常见的是使用proxy_set_header Host $host(或proxy_set_header Host $http_host)。

所以这对你来说应该有用:

upstream w {
    server test1:80;
    server test2:80;
    server localhost:7778;
}

server {
    listen       8001;
    server_name  localhost;

    location / {
        proxy_pass http://w;
        proxy_set_header Host $host;
    }
}

相关内容