代理服务器在同一端口上绑定多个主机名时, 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; } }