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 Host
cabeçalho assim:
location / {
proxy_pass http://app;
proxy_set_header Host $host;
}
Mas também vi o X-Forwarded-Host
sendo 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-Host
cabeçalho se pudesse simplesmente alterá- Host
lo diretamente? Percebi que o resultado em meu aplicativo ASP.NET Core será o mesmo, independentemente de eu definir Host
ou 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?