Зачастую, приложению, стоящему за Nginx, необходимо передать корректный заголовок Host
для корректной генерации различных URL-адресов (редиректы, ресурсы, ссылки в письмах и т.д.).
Возможность его подмены злоумышленником может повлечь множестве проблем от фишинговых атак до SSRF, поэтому следует избегать таких ситуаций.
Возможно, ваше приложение так же ориентируется на заголовок запроса
X-Forwarded-Host
. В этом случае вам необходимо самостоятельно позаботится о его корректной установке при проксировании.
Чаще всего эта проблема возникает в результате использования переменной $http_host
вместо $host
.
Несмотря на их схожесть, они сильно отличаются:
$http
- хост в порядке приоритета: имя хоста из строки запроса, или имя хоста из заголовка Host
заголовка запроса, или имя сервера, соответствующего запросу;$http_host
- заголовок запроса "Host".Пример такой конфигурации:
location @app {
proxy_set_header Host $http_host;
# Other proxy params
proxy_pass http://backend;
}
К счастью, все довольно очевидно:
server_name
;$host
, вместо $http_host
.