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 Host
encabezado de esta manera:
location / {
proxy_pass http://app;
proxy_set_header Host $host;
}
Pero también he visto que X-Forwarded-Host
se 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-Host
encabezado si simplemente puede cambiarlo Host
directamente? He notado que el resultado en mi aplicación ASP.NET Core será el mismo independientemente de si configuro Host
o X-Forwarded-Host
(o ambos), en cualquier caso,HttpContext.Request.Host
se 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?