讓你的網站免費支持 HTTPS 及 Nginx 平滑升級
為什么要使用 HTTPS ?
首先來說一下 HTTP 與 HTTPS 協議的區別吧,他們的根本區別就是 HTTPS 在 HTTP 協議的基礎上加入了 SSL 層,在傳輸層對網絡連接進行加密。簡單點說在 HTTP 協議下你的網站是光著身子在奔跑,但到了 HTTPS 下你穿了一件衣服,別人看不到你的肌肉了(當然,這好像不是好事,不重要),更安全了一點點,就大概這個意思。
SSL 依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。采用 HTTPS 的服務器必須從證書頒發機構 CA(Certificate Authority)申請一個用于證明服務器用途類型的證書,當然一般都有收費,而且不便宜,其實你也可以通過 OpenSSL 自己造一個證書,這樣有一個弊端是大家都不信任你造的證書。那怎么辦?
你必須知道的步驟
通過上面的簡單介紹你應該知道了,要想你的網站支持 HTTPS ,就必須有一個 被信任的證書 ,那這個證書就必須由證書頒發機構(如VeriSign、Microsoft等)頒發的,否則你就會遇到如打開 12306.cn 這樣的 您的連接不是私密連接 的尷尬。

你肯定不想用戶打開后,你的網站是上面這樣的,身邊有好多朋友買票時問過我這是什么意思?我都沒辦法解釋給他們,哎。所以你需要要有下面幾個東西:
- 一個域名(你肯定有)
- Web 服務器(Nginx,Apache,IIS都行)
- SSL 證書(最好 CA 機構頒發的)
就完了,上面三個東西可能最麻煩就是搞到一個被全世界都信任的證書了,沒關系,現在我試著讓你免費獲取一個,注意是 免費!!!
提供免費的證書商也就那么幾個,最知名的可能是 StartSSL ,其他我還知道 Let's Encrypt ,不過這里我用的是國內騰訊云的。
感謝騰訊云
對于得到一個 受信任的證書 很簡單,找第三方證書頒發機構購買就行了,但是一個每年大幾千的證書費用對于小企業或個人來說,有點接受不了,或者是沒錢。現在好了,騰訊云認證用戶可以申請到賽門鐵克(Symantec)免費的 TrustAsia DV SSL 證書了。
登錄騰訊云管理平臺
SSL 證書申請地址在這里: https://console.qcloud.com/ssl ,點擊 申請證書 ,會彈出下面的框:

上面顯示什么 價值1900元/年 ,不要管,點擊 確認 按鈕。彈出表單你填寫你要綁定的域名就行了:

接下來會驗證你的域名,簡單說就是驗證一下這個域名是不是你的,所以你要在域名解析添加一條 CName 記錄,實在不懂的話,官方也有怎么添加的文檔。

一般驗證過程會很快,幾個小時吧,申請通過后,這時候你看到狀態是 已頒發 后,就能下載證書了。

下載下來你打開文件會看到 Nginx,Apache,IIS 三個文件夾,里邊放的就是對應各個服務器的證書。到這里,整個證書申請流程就算完了,接下來就是配置 Web 服務器來支持網站的 HTTPS 訪問了。我這里用的 Nginx 演示。
Nginx 平滑升級以支持 HTTPS
要想讓 Web服務器支持 HTTPS ,首先你的服務器肯定要支持 SSL ,所以我們先檢查 Nginx 是否支持 SSL :
/usr/local/nginx/sbin/nginx -V

通過命令顯示信息,我們看 configure arguments 中是否有 -with-http_ssl_module 字樣,如果像我這樣沒有的話,你就需要重新編譯 Nginx 以支持 SSL 了。如果有,請跳過這步驟,直接看 Nginx 配置 HTTPS 服務 那一節。
安裝 Nginx 可能大家都會,但是平滑升級 Nginx 可能你沒有體驗過,這樣說吧,在線上服務器環境下,你要支持 HTTPS 訪問,但是你發現你的 Nginx 不支持 SSL ,你肯定不能卸載 Nginx 重新安裝時加載 SSL 模塊,因為那是線上服務器。你只能在現有安裝的 Nginx 下進行無痛升級以以支持 SSL ,這就用到了 Nginx 的 平滑升級 概念。
找到你之前安裝 Nginx 時的編譯目錄,如果你和我一樣找不到或許刪除了,那我們就需要重新下載一個 Nginx 了,當然我們是通過 wget 方式,看命令:
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1
配置,加入 SSL 模塊:
./configure --with-http_ssl_module
make

注意,千萬不能在像安裝的時候 make install 了,因為我們這是升級。
備份原 Nginx 執行腳本
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
把新版本 Nginx 編譯腳本放到可執行文件目錄下
cd objs/
cp nginx /usr/local/nginx/sbin/

進行平滑升級,命令:
make upgrade

這時候會輸出這些信息:
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
沒問題之后接下來,查看現在目前版本及安裝模塊:
/usr/local/nginx/sbin/nginx -V

看到已經從 1.4.6 版本升級到了 1.10.1,而且這種升級不影響正常訪問的。線上環境操作也是可以的。
Nginx 配置 HTTPS 服務
編輯配置文件:
cd /usr/local/nginx/conf
vim nginx.conf
拉到最下面,會看到 HTTPS 配置被注釋掉了。嗯,這是模板,我們就在這配置。

文字版:
server {
listen 443 ssl;
server_name www.domain.com;
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}</code></pre>
把上面的 ssl_certificate 和 ssl_certificate_key 替換成你下載下來的證書存放路徑就行,記著下載下來的證書這種配置是放在 /usr/local/nginx/conf 目錄下的,當然你也可以隨意放。
這時候,你就可以打開瀏覽器訪問一下試試了。正常情況 HTTPS 請求是打不開的,因為我們還沒設置防火墻,記得要 開放 443 端口! ,嗯,設置過防火墻就可以正常訪問了吧。
其實到這里,這個服務器支持 HTTPS 請求流程已經結束了,但是你發現好多人在瀏覽器地址欄輸入域名的時候都不輸入 http:// 或 https:// 的,因為瀏覽器會自動幫我們加上 http:// 的,所以,這時候輸入我們剛剛設置的域名其實還是沒有走 https:// 請求,那 怎么讓就是輸入 http:// 也走 HTTPS 呢?
很簡單,Nginx 中這樣配置就行啦!
server {
listen 80;
server_name www.domain.com;
rewrite ^(.*)$ https://$host$1 permanent;
}</code></pre>
我們利用 rewrite 來做跳轉。監聽到 80 端口的 HTTP 請求后,就轉發到 HTTPS ,當然還有好多處理方式。
總結一下
這篇文章講了一下怎么申請免費的 HTTPS 證書,然后利用 Nginx 服務器來配置 HTTPS 請求訪問,并其中順手 平滑升級 Nginx ,如絲般順滑的升級,不影響正常訪問。HTTPS 方式的傳輸對我們網站來說應該是提高了一些安全性的,況且這種方式又很簡單,可以試著搞一搞。
來自:http://www.cnblogs.com/mafly/p/https_nginx.html