nginx上游不能正常工作

代理服务器在同一端口绑定多个主机名时, upstream不起作用。

我在尝试configurationnginx(1.9.12-1〜trusty)proxy_pass Windows Server 2012主机时遇到了这个问题。

我已经在我自己的Windows 10机器上复制了相同的行为。

在下面的configuration中,所有主机名都指向相同的机器IP。

有时需要工作

注意:我是在selectlocalhost: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; } } } 

有没有解决的办法?

当你使用没有proxy_set_header指令的proxy_pass ,nginx会使用一些默认的头文件。 大多数时候,这是你想要的,或者至less是无害的,但在你的情况下,你必须手动设置它们。

当您编写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; } }