nodejs從http升級到https(阿里雲證書的使用)
升級原因
1.各大搜索引擎中,https的網頁的權重比一般的http的網頁權重要高。
2.從使用者體驗的角度,一個老是被瀏覽器提醒該網頁不可信的網頁,總不會讓使用者感到安心
所以將網站從http升級為https是很有必要的
使用者配置
首先介紹一下這次升級的網站
使用阿里雲的ecs伺服器(不是廣告)
nodejs+express網站後臺
使用的證書為阿里雲提供的免費證書
證書申請
首先你要將網站升級為https那麼你得有權威機構發給你的證書(自己簽發的證書可能會有問題在此不提)
但是一般的證書籤發機構都是要收費的,那麼不想花錢的小夥伴們怎麼辦呢?
免費的證書當然是有的,如果你恰好也是阿里雲的使用者,其他服務商可能也有,但是沒有用過,不過大概流程應該是類似的
首先登入你的阿里雲,然後進入控制檯選擇產品與服務
往下滑你會看到在安全分類中有證書
進入後可以購買免費證書,由於我已經購買所以在此就不做示範了
點選下載
這裡選擇下載nginx的版本
請注意這裡的證書只有是系統自動給你生成的才能夠改字尾
改字尾的原因在下面會講到
然後開啟下載的檔案 將.pem字尾的檔案修改為.crt
修改完成後就可以開始nodejs伺服器的配置了
Node配置
我們都知道node建立伺服器是通過http.createSever建立的
那麼我們要將伺服器設定為https訪問就需要使用https.createSever來建立伺服器
這個方法接收的引數如下
第一個引數為整數的配置資訊
key為.key字尾的檔案
cret為.crt字尾的檔案
這裡用fs模組讀取即可
程式碼如下
const https = require('https'), app = express(), fs = require('fs'); //省略express配置的部分 https.createServer({ key: fs.readFileSync('./module/1536605146003.key'),//證書檔案的存放目錄 cert: fs.readFileSync('./module/1536605146003.crt') },app).listen(443,'0.0.0.0');//https預設是443埠
首先本地測試一下
啟動node伺服器
輸入https://localhost
如果正常你會看到瀏覽器給你的警告,因為你的證書是頒發給你的域名的,你在本地環境使用相當於冒用了你網站的證書所以瀏覽器會給出如下警告
在這裡為了驗證服務是否正常啟動
點選高階
然後繼續前往(平時訪問網站請不要這麼搞,炸了請勿找我)
然後你會看到你專案的正常頁面,這裡我就不展示我的專案了
如果能看到你專案的正常頁面說明訪問成功
下一步可以配置到伺服器上了
伺服器配置(centos7)
首先通過xftp將修改後的node配置傳輸到伺服器上
修改完成後重啟伺服器,不出意外的話是無法訪問的,因為你的伺服器很有可能沒有開啟443埠
所以我們先看一下當前哪些埠是開啟的
命令列輸入
firewall-cmd --zone=public --list-ports
這裡看到我已經開啟了443埠
如果沒有開啟的小夥伴依次如輸入
firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --reload
再次執行最上面的命令應該即可以看到開放了443埠
開放過後應該就可以通過https的方式訪問你的網站了
網站重定向
雖然在上方的操作完成後我們已經可以用https訪問你的網站了
但會存在一些問題
比如你以前的使用者並不知道你升級到了https或者你還有其他域名指向同一個網站
就比如我有兩個域名都指向這同一個網站並且都解析在80埠
所以我需要將所有域名都指向我的新https的域名,並且讓使用http訪問的使用者也能訪問到升級過後的網站
所以我還需要寫一個nodejs伺服器幫我監聽原來的80埠,並讓它重定向到我的新網址
這裡直接貼出程式碼
const http = require('http'); let sever = http.createServer(function (req,res) { res.writeHead(301,{'Location':'https://已簽發證書的網址'}); res.end(); }); sever.listen(80,'0.0.0.0');
然後丟到伺服器上,並啟動這樣就可以將我們的網站平滑地過渡到https了
有需要的小夥伴,將程式碼中的 ‘已簽發證書’ 替換為你的域名即可