upstream
не работает, когда прокси-сервер имеет привязка более одного имени хоста на тот же порт.
Я столкнулся с этой проблемой при настройке nginx (1.9.12-1 ~ надежный) к proxy_pass
а Windows Server 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;
}
}
}
Запросы не работают постоянно
Примечание: отредактировано по указанию Алексея.
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_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;
}
}