Nginx配置HTTPS/WSS并部署Node.js項(xiàng)目

近期在做小程序的項(xiàng)目义矛,項(xiàng)目中涉及用WebSocket實(shí)現(xiàn)即時通訊咆槽。開發(fā)的時候可以勾選不校驗(yàn)域名派诬,可以只請求http與ws劳淆。但小程序上線必須使用https和wss。

1.前期準(zhǔn)備工作

配置HTTPS需要準(zhǔn)備以下三個東西

  • 服務(wù)器
  • 域名
  • SSL證書

我選購的服務(wù)器為騰訊云的windows server 2012
關(guān)于域名購買解析與SSL證書申請請直接參考(騰訊云)官方教程

域名購買https://buy.cloud.tencent.com/domain

域名購買完成后需要解析到我們服務(wù)器的主機(jī)默赂,就是讓域名和服務(wù)器的IP地址綁定沛鸵。
云解析https://cloud.tencent.com/document/product/302/3446

解析完成后我們再申請證書,這步需要填寫相關(guān)資料并上傳身份證缆八,通過審核后就可以下載證書曲掰,這個證書我們后面要上傳到服務(wù)器里使用。



點(diǎn)擊下載后是一個壓縮包奈辰,解壓后內(nèi)容如下栏妖,根據(jù)自己的服務(wù)器選擇相應(yīng)的證書文件夾。


我的Web服務(wù)器為IIS(IIS是微軟公司的Web服務(wù)器奖恰。主要支持ASP語言環(huán)境.)底哥,使用Nginx反向代理,至于Nginx的安裝后面再講房官。

SSL證書管理https://console.cloud.tencent.com/ssl

2.開始折騰服務(wù)器

準(zhǔn)備工作做完后趾徽,我們登陸服務(wù)器。
在服務(wù)器里建立一個文件夾翰守,將下載的證書復(fù)制進(jìn)去孵奶。

配置本地服務(wù)器

打開服務(wù)器管理器,點(diǎn)擊添加角色和功能-選擇基于角色或基于功能的安裝-從服務(wù)器池中選擇服務(wù)器-選中web服務(wù)器-下一步-安裝

等待安裝完成即可

添加SSL證書

參考此文:https://jingyan.baidu.com/article/eb9f7b6d7f83b6869364e8a9.html

二蜡峰、創(chuàng)建證書控制臺這部分即可

添加網(wǎng)站

首先在你的服務(wù)器上找一個文件夾了袁,創(chuàng)建index.html

點(diǎn)擊工具,選擇IIS管理器



a.png

務(wù)必選擇https湿颅,以及你上一步添加的SSL證書
(https默認(rèn)443端口载绿,http默認(rèn)80端口)

此處有個坑,選擇完物理路徑后點(diǎn)擊測試設(shè)置會發(fā)現(xiàn)授權(quán)有問題


b.png

不難解決油航,點(diǎn)擊連接為崭庸,改為特定用戶,這個用戶需要自己先添加

按win+R鍵打開運(yùn)行谊囚,輸入compmgmt.msc

d.png

右擊用戶添加即可怕享,記住用戶名和密碼,再回到連接為那設(shè)置特定用戶镰踏。
設(shè)置完成后在點(diǎn)擊測試設(shè)置*就沒問題啦

之后確定添加網(wǎng)站

添加完成后點(diǎn)擊你添加的網(wǎng)站函筋,選擇目錄瀏覽


切換到內(nèi)容試圖,右擊index.html奠伪,選擇瀏覽就可以預(yù)覽到我們的網(wǎng)頁了跌帐。

到這一步我們已經(jīng)成功的在IIS上添加了一個網(wǎng)站首懈,并且可以使用https訪問。

f.png

安裝Nginx

參考此文:https://www.jb51.net/article/120469.htm

Nginx的關(guān)鍵在于配置文件
‘配置文件為nginx安裝目錄下的 \conf\nginx.conf
使用NotePad++編輯配置文件谨敛,重要的事情說三遍
不要用記事本究履!不要用記事本!不要用記事本佣盒!

nginx.conf文件內(nèi)容如下


http {
    
    
    # HTTPS server
    #
    server {
        listen 443;
        server_name www.xxx.com; #填寫綁定證書的域名
        ssl on;
        ssl_certificate 1_你的域名_bundle.crt; 
        ssl_certificate_key 2_你的域名.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協(xié)議配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
        ssl_prefer_server_ciphers on;
        location / {
            root   C:\web; #站點(diǎn)目錄
            index  index.html index.htm;
        }
    }

}

修改你的配置文件如上挎袜,重新啟動nginx服務(wù)顽聂,若報錯檢查先端口是否沖突肥惭,報錯試試關(guān)閉IIS里啟動的網(wǎng)站

若還報錯很可能是配置文件出錯,仔細(xì)檢查檢查紊搪。

成功重啟nginx后,便可用https訪問了

配置wss

配置wss只需要在nginx配置文件里簡單添加幾行


    map $http_upgrade $connection_upgrade {  
        default upgrade;  
        '' close;  
    }  
    upstream websocket {  
        server 119.29.196.xxx:8888;  
    }  

server {  
        listen 8888;  
        server_name www.xxx.com;
        ssl on;
        ssl_certificate 1_xxx.crt;
        ssl_certificate_key 2_xxx.key;
        ssl_session_timeout 20m;
        ssl_verify_client off;
        location / {  
            proxy_pass http://127.0.0.1:3000;  
            proxy_http_version 1.1;  
            proxy_set_header Upgrade $http_upgrade;  
            proxy_set_header Connection "Upgrade";  
        }  
    }

復(fù)制上述代碼,修改server_name压汪、ssl_certificate和ssl_certificate_key硬爆,以及upstream websocket下的IP地址,改為你的服務(wù)器IP地址

重啟nginx服務(wù)即可

WEBSOCKET_URL : wss//www.xxx.com:8888

測試wss

下面是一個簡單的控制臺websocket示例
項(xiàng)目目錄:

Node.js代碼

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function (req, res) {
  res.send('<h1>Welcome Realtime Server</h1>');
});
io.on('connection', function (socket) {
  console.log('a user connected');
  socket.on("disconnect", function () {
    console.log("a user go out");
  });
  socket.on("message", function (obj) {
    io.emit("message", obj);
  });
});
http.listen(3000, function () {
  console.log('listening on *:3000');
});

前端代碼

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <!-- <script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script> -->
  <script src='./node_modules/socket.io-client/dist/socket.io.js'></script>
</head>

<body>
  <ul id="message"></ul>
  <script>
    socket = io.connect('wss://www.xinglinfengyun.xyz:8888');
    socket.emit("message", {
      "name": navigator.userAgent,
      "msg": "666666"
    });
    socket.on("message", function (obj) {
      console.log(obj);
    });
  </script>
</body>

</html>

nginx部署項(xiàng)目

將項(xiàng)目拷貝到服務(wù)器
執(zhí)行node server.js啟動項(xiàng)目

成功運(yùn)行如上圖

node.js項(xiàng)目的端口號要與Nginx配置文件中的 proxy_pass 相同

我用的都是3000端口

在瀏覽器打開index.html滞伟,打開控制臺

如上圖所示即收到了服務(wù)端的消息

到這里說明wss也配置成功了揭鳞!

總結(jié)

本次折騰涉及到的知識有域名、服務(wù)器梆奈、IIS野崇、Nginx、https亩钟、wss乓梨、node.js搭建websocket示例,這些都是我的知識盲區(qū)清酥。
學(xué)習(xí)新知識時總會畏懼抵觸扶镀,看了無數(shù)篇博文,踩了許多坑焰轻。對于如何用Nginx部署Node.js項(xiàng)目還有些疑惑臭觉,抽空再解決。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辱志,一起剝皮案震驚了整個濱河市胧谈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荸频,老刑警劉巖菱肖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旭从,居然都是意外死亡稳强,警方通過查閱死者的電腦和手機(jī)场仲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來退疫,“玉大人渠缕,你說我怎么就攤上這事“保” “怎么了亦鳞?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棒坏。 經(jīng)常有香客問我燕差,道長,這世上最難降的妖魔是什么坝冕? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任徒探,我火速辦了婚禮,結(jié)果婚禮上喂窟,老公的妹妹穿的比我還像新娘测暗。我一直安慰自己,他們只是感情好磨澡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布碗啄。 她就那樣靜靜地躺著,像睡著了一般稳摄。 火紅的嫁衣襯著肌膚如雪稚字。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天秩命,我揣著相機(jī)與錄音尉共,去河邊找鬼。 笑死弃锐,一個胖子當(dāng)著我的面吹牛袄友,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霹菊,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剧蚣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了旋廷?” 一聲冷哼從身側(cè)響起鸠按,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饶碘,沒想到半個月后目尖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扎运,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年瑟曲,在試婚紗的時候發(fā)現(xiàn)自己被綠了饮戳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡洞拨,死狀恐怖扯罐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烦衣,我是刑警寧澤歹河,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站花吟,受9級特大地震影響秸歧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜示辈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一寥茫、第九天 我趴在偏房一處隱蔽的房頂上張望遣蚀。 院中可真熱鬧矾麻,春花似錦、人聲如沸芭梯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玖喘。三九已至甩牺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間累奈,已是汗流浹背贬派。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澎媒,地道東北人搞乏。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像戒努,于是被迫代替她去往敵國和親请敦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354