Modificar o cabeçalho `Host` ou passar `X-Forwarded-Host` ao usar o Nginx como proxy reverso?

Modificar o cabeçalho `Host` ou passar `X-Forwarded-Host` ao usar o Nginx como proxy reverso?

Estou tentando usar o Nginx como proxy reverso e o servidor upstream é um aplicativo ASP.NET Core onde registrei oForwardedHeadersMiddleware, que lerá três X-Forwarded-*cabeçalhos diferentes:

  • X-Forwarded-For
  • X-Forwarded-Proto
  • X-Forwarded-Host

Agora, entendo os dois primeiros, mas acho o último ( X-Forwarded-Host) confuso. Já vi configurações de proxy reverso Nginx geralmente reescrevendo o Hostcabeçalho assim:

location / {
    proxy_pass http://app;
    proxy_set_header Host $host;
}

Mas também vi o X-Forwarded-Hostsendo usado:

location / {
    proxy_pass http://app;
    proxy_set_header X-Forwarded-Host $host;
}

Em alguns casos, ambos são usados ​​ao mesmo tempo:

location / {
    proxy_pass http://app;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
}

Não tenho certeza do que devo fazer. Por que você usaria os dois ao mesmo tempo? E por que alguém usaria o X-Forwarded-Hostcabeçalho se pudesse simplesmente alterá- Hostlo diretamente? Percebi que o resultado em meu aplicativo ASP.NET Core será o mesmo, independentemente de eu definir Hostou X-Forwarded-Host(ou ambos), em ambos os casos,HttpContext.Request.Hosté definido com o valor esperado - desde que o middleware dos cabeçalhos encaminhados esteja registrado, é claro.

Para minha surpresa, não consegui encontrar nenhuma informação relevante sobre esse assunto pesquisando no Google, então tive que perguntar isso aqui. Qual é a abordagem correta a ser adotada nesta situação?

informação relacionada