Я пытаюсь использовать Nginx в качестве обратного прокси-сервера, а вышестоящий сервер — это приложение ASP.NET Core, в котором я зарегистрировалForwardedHeadersMiddleware
, который будет читать три разных X-Forwarded-*
заголовка:
X-Forwarded-For
X-Forwarded-Proto
X-Forwarded-Host
Теперь я понимаю первые два, но последний ( X-Forwarded-Host
) сбивает с толку. Я видел конфигурации обратного прокси Nginx, которые обычно переписывают Host
заголовок следующим образом:
location / {
proxy_pass http://app;
proxy_set_header Host $host;
}
Но я также видел, как X-Forwarded-Host
вместо этого использовали:
location / {
proxy_pass http://app;
proxy_set_header X-Forwarded-Host $host;
}
В некоторых случаях оба варианта используются одновременно:
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
}
Я не уверен, что мне делать. Зачем использовать оба одновременно? И зачем кому-то использовать заголовок, X-Forwarded-Host
если можно просто изменить Host
заголовок напрямую? Я заметил, что результат в моем приложении ASP.NET Core будет одинаковым независимо от того, устанавливаю я Host
или X-Forwarded-Host
(или оба), в любом случае,HttpContext.Request.Host
устанавливается на ожидаемое значение — конечно, при условии, что промежуточное программное обеспечение пересылаемых заголовков зарегистрировано.
К моему удивлению, я не смог найти никакой соответствующей информации по этому вопросу в Google, поэтому мне пришлось спросить об этом здесь. Каков правильный подход в этой ситуации?