需求簡介
現在公司要做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