使用 Nginx 作為反向代理時修改“Host”標頭或傳遞“X-Forwarded-Host”?

使用 Nginx 作為反向代理時修改“Host”標頭或傳遞“X-Forwarded-Host”?

我正在嘗試使用 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設定為預期值——當然,前提是轉發的標頭中間件已註冊。

令我驚訝的是,我通過谷歌搜索找不到任何關於這個問題的相關信息,所以我不得不在這裡問這個問題。在這種情況下,正確的做法是什麼?

相關內容