Nginx 重定向時獲取網域名稱

2021-09-19 11:02:44 字數 1407 閱讀 5206

如果你在處理 nginx 重定向時要獲取原請求的網域名稱(比如 http 到 https),請用$host而不是$server_name

從 http 的 sub2 子網域名稱跳轉到 https 的 sub1 子網域名稱

->

我用的 nginx ,當初為了讓 http 請求跳轉到同名的 https 請求,配置如下:

}因為 301 是永久重定向,某些瀏覽器的快取會記住重定向,下次訪問原位址就會直接向新位址發請求,所以這個問題在瀏覽器裡面不一定重現得了(包括 chrome 的 incognito window),能每次完整重現的方式只有curl

location:查了一下,發現問題出在$server_name變數上。這個變數會始終返回 server_name 中第乙個名字。這裡其實應該用$host變數。修改後的配置如下:

}$host變數會按照以下優先順序獲取網域名稱:

request-line 中的網域名稱資訊。request-line 包含 method, uri 和 http 版本。

請求頭資訊中的 "host" 。

nginx 中匹配的 server_name 配置。

這幾乎可以保證在任何環境下正確地得到網域名稱。如果是同網域名稱下的重定向最好都用$host

nginx wiki - $host

nginx 官方文件。其中對$host講的比較詳細,但$server_name只是一筆帶過。

stackoverflow 上關於三個變數區別的討論。裡面提到了為什麼$host是適用於所有場景的唯一選擇。

http/1.1 規範中對 request-line 的描述。

Nginx 重定向時獲取網域名稱的方法示例

tl dr 如果你在處理 nginx 重定向時要獲取原請求的網域名稱 比如 http 到 https 請用 host 而不是 server name 問題和解決方案 今天碰到乙個問題,伺服器上乙個子網域名稱的請求重定向到另乙個子網域名稱上面去了。查了一段時間發現這個問題只有在 http 到 http...

nginx網域名稱重定向遇到的問題

應客戶要求,需要給客戶配個網域名稱,然後我們的大牛強哥 建議後台不要配備網域名稱伺服器了,這樣不安全,一般都是對外的web伺服器才配置網域名稱 結合另外收藏的乙個博文安裝nginx,然後修改配置檔案如下 乙個網域名稱對應乙個conf檔案 server location share location ...

301網域名稱重定向

客戶多個網域名稱.net com想讓大家開啟的全是.com網域名稱 通過iis的主目錄 重定向到url,並設定打鉤資源的永久重定向 出現一直無法正確轉到 通過 進行重定向 comdomain www.com 定義com網域名稱 if request.servervariables server na...