Измените заголовок `Host` или передайте вместо него `X-Forwarded-Host` при использовании Nginx в качестве обратного прокси-сервера?

Измените заголовок `Host` или передайте вместо него `X-Forwarded-Host` при использовании Nginx в качестве обратного прокси-сервера?

Я пытаюсь использовать 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, поэтому мне пришлось спросить об этом здесь. Каков правильный подход в этой ситуации?

Связанный контент