![当使用 Nginx 作为反向代理时,修改 `Host` 标头还是传递 `X-Forwarded-Host`?](https://linux22.com/image/782342/%E5%BD%93%E4%BD%BF%E7%94%A8%20Nginx%20%E4%BD%9C%E4%B8%BA%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E6%97%B6%EF%BC%8C%E4%BF%AE%E6%94%B9%20%60Host%60%20%E6%A0%87%E5%A4%B4%E8%BF%98%E6%98%AF%E4%BC%A0%E9%80%92%20%60X-Forwarded-Host%60%EF%BC%9F.png)
我正在尝试使用 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
设置为预期值 — — 当然,前提是已注册转发的标头中间件。
令我惊讶的是,我通过谷歌搜索找不到有关此问题的任何相关信息,所以我不得不在这里问这个问题。在这种情况下应该采取什么正确的方法?