Как правило, нет необходимости явно выполнять proxy_set_header Host proxy_host
, потому что это значение по умолчанию. Если вам нужно вызвать сервер с помощью чего-то другого, кроме того, что указано в директиве proxy_pass
, вам нужно переопределить через proxy_set_header something
.
Если вы хотите проксировать тот же хост, что и в вашей директиве server_name
, то у вас есть возможность использовать proxy_set_header $host
. Это обычно имеет место, если, возможно, фактическое приложение размещено на другом порту или на каком-то внутреннем сервере.
server {
listen 80;
server_name site.example.com;
location / {
proxy_set_header Host $host;
proxy_pass http://localhost:8080;
}
}
Если имя, которое вы вызываете восходящему потоку, не является его реальным DNS-именем, тогда у вас может быть что-то вроде:
# 192.168.2.1 responds to site.example.com, but
# site.example.com doesn't actually resolve to 192.168.2.1
proxy_pass http://192.168.2.1;
proxy_set_header Host site.example.com;
Другой случай может быть для виртуального хостинга на основе имени, где есть полезное DNS-имя для восходящего потока, но вы хотели бы назвать его другим именем.
proxy_pass http://origin.example.com;
proxy_set_header Host site.example.com
27.09.2016
proxy_pass
иproxy_set_header
? 14.06.2019upstream
прочитает все настройки, применимые к его внутренним фазам, а затем применит их, когда выдаст фактическийproxy_pass
. Вы получите точно такое же поведение, еслиproxy_set_header
послеproxy_pass
в конфигурации. 16.06.2019$host
и$proxy_host
. Значит, это неправильно: клиент отправляет запрос на сервер nginx A, который прокси-сервер передает его на серверную часть B. Тогда$host
будет URL-адресом A, а$proxy_host
будет URL-адресом B. Поэтому, если я хочу, чтобы будущие запросы клиента по-прежнему направлялись на A, я бы хотел использовать$host
? Это правильно? 01.05.2021