upstream
当代理服务器有多个主机名绑定在同一端口。
我在尝试配置时遇到了这个问题nginx(1.9.12-1~trusty)到proxy_pass
Windows 服务器 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_pass
无proxy_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;
}
}