nginx強制使用https訪問(http跳轉到https)

需求簡介

   現在公司要做app,但是蘋果商店要求2017年1月1日之後,所有的對接網站必須ssl加密的,所以公司只能申請購買ssl。但是一般用戶訪問都會是80端口訪問的,如果不做跳轉,訪問80頁面會報錯,所以如下介紹三種方式。我的域名是http://www.jinglianwang.cn跳轉到https://www.jinglianwang.cn 


一、nginx的rewrite方法


思路

這應該是大家最容易想到的方法,將所有的http請求通過rewrite重寫到https上即可

配置

server {  

    listen  80;  

    server_name www.jinglianwang.cn;   

    rewrite ^(.*)$  https://$host$1 permanent;  

需要在server添加443的配置

 server { 

        listen       443; 

        server_name  www.jinglianwang.cn; 

        ssl                  on; 

        ssl_certificate      server.pem; 

        ssl_certificate_key  server.key; 

        ssl_session_timeout  5m; 

        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;

       #啓用TLS1.1、TLS1.2要求OpenSSL1.0.1及以上版本,若您的OpenSSL版本低於要求,請使用     ssl_protocols TLSv1;

        ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; 

        ssl_prefer_server_ciphers   on; 

        *********** 公司配置,略

    } 

此配置完成後,就可以將http://www.jinglianwang.cn的請求全部重寫到https://www.jinglianwang.cn上了

二、nginx的497狀態碼

error code 497

497 - normal request was sent to HTTPS  


解釋:當此虛擬站點只允許https訪問時,當用http訪問時nginx會報出497錯誤碼

思路

利用error_page命令將497狀態碼的鏈接重定向到https://www.jinglianwang.cn這個域名上

配置

server {  

    listen       www.jinglianwang.cn:443;  #ssl端口  

    listen       www.jinglianwang.cn:80;   #用戶習慣用http訪問,加上80,後面通過497狀態碼讓它自動跳到443端口  

    server_name  test.com;  

    #爲一個server{......}開啓ssl支持  

    ssl                  on;  

    #指定PEM格式的證書文件   

    ssl_certificate      /etc/nginx/server.pem;   

    #指定PEM格式的私鑰文件  

    ssl_certificate_key  /etc/nginx/server.key;  

      

    #讓http請求重定向到https請求   

    error_page 497  https://$host$uri?$args;  

 

(不建議用這種)


三、index.html刷新網頁


思路

上述兩種方法均會耗費服務器的資源,我們用curl訪問baidu.com試一下,看百度的公司是如何實現baidu.com向www.baidu.com的跳轉

 


可以看到百度很巧妙的利用meta的刷新作用,將baidu.com跳轉到www.baidu.com.因此我們可以基於http://www.jinglianwang.cn的虛擬主機路徑下也寫一個index.html,內容就是http向https的跳轉

index.html

<html>  

<meta http-equiv="refresh" content="0;url=https://www.jinglianwang.cn/">  

</html>  


nginx虛擬主機配置


server {  

    listen 80;  

    server_name www.jinglianwang.cn;  

      

    location / {  

                #index.html放在虛擬主機監聽的根目錄下  

        root /jinglian/;  

    }  

        #將404的頁面重定向到https的首頁  

    error_page  404 https://www.jinglianwang.cn/;  

}

 

443配置不復述。 


後記

(1)上述三種方法均可以實現基於nginx強制將http請求跳轉到https請求,大家可以評價一下優劣或者根據實際需求進行選擇。

(2)我的博客面向均爲有一定基礎的同學,參考時一定要結合自己的實際情況,我很多配置基於項目安全考慮做了刪減,切忌無腦照抄!


需要合作交流的可以加QQ羣:163935235


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章