我正在尝试使用 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
设置为预期值 — — 当然,前提是已注册转发的标头中间件。
令我惊讶的是,我通过谷歌搜索找不到有关此问题的任何相关信息,所以我不得不在这里问这个问题。在这种情况下应该采取什么正确的方法?