Nginx實現同一端口HTTP跳轉HTTPS


轉自:https://www.cnblogs.com/pencile/p/Nginx_http_to_https.html

小目標:在只監聽一個端口的情況下,將http訪問跳轉為https。 

一般情況下http協議使用80端口,https協議443端口。要實現http強制轉https是非常簡單的事,隨便都可以找到很多方案。使用非默認端口時這就變得有點麻煩了。

曾經看過一篇文章講述如何讓http 和https 在一個端口上工作。原理大概是以tcp方式監聽,檢查傳入的前幾個字節,從而判斷出是HTTP還是HTTPS的請求,再將數據轉發到相應端口上。這種方式非常強悍,但如果僅僅是讓http跳轉到https有點殺雞用牛刀的感覺。

最近無意中看到一篇有關Nginx的文章,其中提到了一個497的狀態碼:

Nginx internal code used for the plain HTTP requests that are sentto HTTPS port to distinguish it from 4XX in a log and an error pageredirection.

由此可見Nginx內部是可以檢測到錯誤的請求的。因此可以嘗試通用error_page去攔截。 配置代碼:

error_page 497 https://$host:$server_port$uri$is_args$args;

重啟Nginx 后,使用瀏覽器以http訪問網站,跳轉了!!!

由此證明用error_page攔截497實現http跳轉https是可行的。

PS:error_page可以作為server節點的局部配置也可以放在http節點作為全局配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM