Nginx 如何配置強(qiáng)制 HTTP 跳轉(zhuǎn) HTTPS 并保留原始請(qǐng)求參數(shù)
最推薦的做法是在監(jiān)聽 80 端口的 server 塊中使用 return 301 指令,配合 $request_uri 變量,這樣既能實(shí)現(xiàn)永久跳轉(zhuǎn),又能原生保留路徑和查詢參數(shù)。
先說結(jié)論:這是 Nginx 官方推薦的標(biāo)準(zhǔn)寫法,配置簡(jiǎn)單且對(duì)搜索引擎友好,適合絕大多數(shù)已部署 SSL 證書的生產(chǎn)環(huán)境。
- 適合:已擁有有效 HTTPS 證書,希望統(tǒng)一流量入口的站點(diǎn)
- 先準(zhǔn)備:確認(rèn) 443 端口服務(wù)正常,備份現(xiàn)有配置文件
- 驗(yàn)收:檢查跳轉(zhuǎn)狀態(tài)碼是否為 301,確認(rèn) URL 參數(shù)未丟失
命令速用版
如果你已經(jīng)有一個(gè)可用的 HTTPS server 塊,只需在配置文件中增加或修改監(jiān)聽 80 端口的 server 塊,核心配置如下:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}這段配置會(huì)攔截所有 HTTP 請(qǐng)求,并原樣跳轉(zhuǎn)到對(duì)應(yīng)的 HTTPS 地址。
為什么會(huì)這樣
HTTP 是明文傳輸,存在數(shù)據(jù)被竊聽或篡改的風(fēng)險(xiǎn),強(qiáng)制跳轉(zhuǎn) HTTPS 是為了保障通信安全。使用 301 狀態(tài)碼是因?yàn)樗?ldquo;永久移動(dòng)”,瀏覽器和搜索引擎會(huì)記住這個(gè)規(guī)則,后續(xù)請(qǐng)求會(huì)自動(dòng)嘗試 HTTPS,有利于 SEO 權(quán)重傳遞。
關(guān)于參數(shù)保留,Nginx 的 $request_uri 變量包含了客戶端請(qǐng)求的完整 URI,包括路徑和問號(hào)后面的查詢參數(shù)(args)。相比之下,如果只用 $uri 可能會(huì)丟失參數(shù),需要額外拼接 $args,而 $request_uri 是開箱即用的完整地址。
分步處理
1. 備份配置:在修改前務(wù)必備份當(dāng)前配置文件,防止語法錯(cuò)誤導(dǎo)致服務(wù)不可用。
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
2. 編輯配置:打開 Nginx 配置文件(通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-enabled/),添加或修改監(jiān)聽 80 的 server 塊。確保 server_name 與你的 HTTPS 配置一致。
3. 語法檢查:修改完成后,先運(yùn)行測(cè)試命令,確保沒有拼寫錯(cuò)誤。
nginx -t
如果顯示 successful,再進(jìn)行下一步;如果報(bào)錯(cuò),根據(jù)提示行號(hào)檢查拼寫。
4. 平滑重載:確認(rèn)無誤后,重載配置使改動(dòng)生效,不會(huì)中斷現(xiàn)有連接。
nginx -s reload
怎么驗(yàn)證是否生效
1. 命令行檢查:使用 curl 命令查看響應(yīng)頭,確認(rèn)狀態(tài)碼是 301 且 Location 指向 https。
curl -I http://example.com/?test=1
觀察返回頭中的 HTTP/1.1 301 Moved Permanently 和 Location: https://example.com/?test=1。
2. 瀏覽器驗(yàn)證:在地址欄輸入 http 開頭的帶參數(shù)網(wǎng)址,觀察地址欄是否自動(dòng)變?yōu)?https,且參數(shù)部分保持不變。
3. 日志確認(rèn):查看 Nginx 訪問日志,確認(rèn) 80 端口的請(qǐng)求狀態(tài)碼記錄為 301。
常見坑
1. 跳轉(zhuǎn)死循環(huán):如果 HTTPS 的 server 塊配置錯(cuò)誤,也可能把請(qǐng)求又轉(zhuǎn)回 HTTP,導(dǎo)致瀏覽器報(bào)錯(cuò)“重定向次數(shù)過多”。確保 443 端口配置中不再有 return 301 http 的邏輯。
2. $host 變量獲取異常:如果客戶端請(qǐng)求直接使用的是 IP 地址,$host 可能是 IP。如果證書只綁定域名,HTTPS 握手可能會(huì)失敗。建議 server_name 明確指定域名。
3. HSTS 影響:如果開啟了 HSTS(HTTP Strict Transport Security),瀏覽器會(huì)強(qiáng)制記住 HTTPS 策略。在調(diào)試期間如果配置錯(cuò)誤,可能需要清除瀏覽器緩存才能恢復(fù) HTTP 訪問。
4. 反向代理場(chǎng)景:如果 Nginx 前面還有負(fù)載均衡器或 CDN,需要在跳轉(zhuǎn)邏輯中考慮 X-Forwarded-Proto 頭,避免在內(nèi)部網(wǎng)絡(luò)重復(fù)跳轉(zhuǎn)。
參考來源
- Nginx 官方文檔 - ngx_http_rewrite_module 模塊 return 指令說明
- Nginx 官方文檔 - ngx_http_core_module 模塊 內(nèi)置變量說明
到此這篇關(guān)于Nginx 如何配置強(qiáng)制 HTTP 跳轉(zhuǎn) HTTPS 并保留原始請(qǐng)求參數(shù)的文章就介紹到這了,更多相關(guān)Nginx 強(qiáng)制 HTTP 跳轉(zhuǎn) HTTPS 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux 系統(tǒng) nginx 服務(wù)器安裝及負(fù)載均衡配置詳解
nginx(engine x) 是一個(gè) 高性能 的 HTTP 和 反向代理 服務(wù)器、郵件代理服務(wù)器以及通用的 TCP/UDP 代理服務(wù)器。這篇文章主要介紹了Linux 系統(tǒng) nginx 服務(wù)器安裝及負(fù)載均衡配置詳解,需要的朋友可以參考下2019-07-07
nginx使用stream模塊代理端口的實(shí)現(xiàn)
本文主要介紹了nginx使用stream模塊代理端口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Nginx安裝配置naxsi waf防火墻的方法實(shí)現(xiàn)
Naxsi是第三方nginx模塊,它也能有效防御,本文主要介紹了Nginx安裝配置naxsi waf防火墻的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Nginx 平滑升級(jí)的實(shí)現(xiàn)(拒絕服務(wù)漏洞)
本文主要介紹了Nginx 平滑升級(jí)的實(shí)現(xiàn)(拒絕服務(wù)漏洞),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02

