¿Modificar el encabezado `Host` o pasar `X-Forwarded-Host` en su lugar cuando se utiliza Nginx como proxy inverso?

¿Modificar el encabezado `Host` o pasar `X-Forwarded-Host` en su lugar cuando se utiliza Nginx como proxy inverso?

Estoy intentando usar Nginx como proxy inverso y el servidor ascendente es una aplicación ASP.NET Core donde registré elForwardedHeadersMiddleware, que leerá tres X-Forwarded-*encabezados diferentes:

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

Ahora entiendo los dos primeros, pero el último ( X-Forwarded-Host) me resulta confuso. He visto configuraciones de proxy inverso de Nginx que generalmente reescriben el Hostencabezado de esta manera:

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

Pero también he visto que X-Forwarded-Hostse usa en su lugar:

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

En algunos casos se utilizan ambos al mismo tiempo:

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

No estoy seguro de qué debo hacer. ¿Por qué usarías ambos al mismo tiempo? ¿Y por qué alguien usaría el X-Forwarded-Hostencabezado si simplemente puede cambiarlo Hostdirectamente? He notado que el resultado en mi aplicación ASP.NET Core será el mismo independientemente de si configuro Hosto X-Forwarded-Host(o ambos), en cualquier caso,HttpContext.Request.Hostse establece en el valor esperado, siempre que el middleware de encabezados reenviados esté registrado, por supuesto.

Para mi sorpresa, no pude encontrar ninguna información relevante sobre este tema buscando en Google, así que tuve que preguntar esto aquí. ¿Cuál es el enfoque correcto a seguir en esta situación?

información relacionada