我正在嘗試使用 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
?我注意到,無論我設定Host
還是X-Forwarded-Host
(或兩者),我的 ASP.NET Core 應用程式中的結果都是相同的,HttpContext.Request.Host
設定為預期值——當然,前提是轉發的標頭中間件已註冊。
令我驚訝的是,我通過谷歌搜索找不到任何關於這個問題的相關信息,所以我不得不在這裡問這個問題。在這種情況下,正確的做法是什麼?