關於小程序websocket全套解決方案,Nginx代理wss


需求對話

提問

我在本地web能夠使用ws協議去鏈接websocket,但是小程序不能使用。

回答

由於小程序使用的是SSL加密協議,所以需要使用wss。這里wss與ws的關系就相當於https於http的關系。

提問

我用的是寶塔Linux,SSL好申請,但是wss我就不會配置了。

回答

對的寶塔Linux申請SSL很簡單,一鍵申請,相對https實現就很簡單了。那我們開始做配置吧。但前提你需要保證以下的幾個必備條件。

前提必備:

  1. 需要先為你的websocket域名申請SSL
  2. 寶塔Linux(非寶塔其實一樣能用,但是我這里的教程主要針對寶塔Linux做的)

Nginx代理WSS

這一步主要用來實現wss轉ws(即轉到http)

圖片描述

打開管理后台,點開“網站”->“相應的域名”->“配置文件”(我糊的地方只是我的域名和ip信息,不是重要信息,不用在意)

圖片描述

搜索#SSL-END,在這串注釋后面加上以下代碼,圖上我已經加上了,所以和你的肯定不一樣

    #wss協議轉發 小程序里面要訪問的鏈接
    # 訪問:wss://xxxx.com/wss
    location /wss {
        proxy_pass http://host:8080;#代理到上面的地址去,
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

關於以上的配置我必須要說清楚,proxy_pass http://host:8080后面的地址加端口是你websocket的地址,這里必須加上端口,例如:http://baidu.com:8080,這里需要手動改的就是這一個地方。

先別關閉這個窗口,接下來還有

圖片描述

接下來把鼠標移到最頂端,也就是server上面添加以下代碼,一樣的道理,我這里已經添加了,所以和你的不一樣,以你的為准

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
upstream websocket {
    server ip:8080;  #這里可以是多個服務端IP(分多行),設置權重就可以實現負載均衡了
}

這里需要手動設置一下,就是在upstream websocket里面有一個ip:8080。這個ip請替換成你的IP,IP在什么地方可以看到呢,看你寶塔linux左上角就有了,對就是那個。例如:server 114.114.114.114:8080

至此Nginx代理wss就算全部ok。請注意我用的socket端口是8080,如果你的端口被占用,請你更改,當然如果改了請把一系列的都改了

小程序websocket使用

官方文檔: https://developers.weixin.qq....

我這里只是做連接測試。只是一個Demo

  miniWebsocket:function(){
    wx.connectSocket({
      url: 'wss://host/wss',
      //這里只需要填寫你開始配置的域名就好,但是請在域名后面添加一個/wss。例如:wss://baidu.com/wss
    })
    wx.onSocketOpen(function(res){
      console.log(res)
      console.log('打開成功')
    })
    wx.onSocketMessage(function(res){
      console.log('收到服務器信息'+JSON.stringify(res))
    })
    wx.onSocketOpen(function (res) {
      console.log('WebSocket連接已打開!')
      console.log('數據發送')
      wx.sendSocketMessage({
        data: 'ekeylee'
      })   
    })
  }

圖片描述

上圖就是我已經配置好小程序的返回信息,如果有什么地方寫的不是很清楚,請文末留言,感謝

本文轉載於:猿2048→https://www.mk2048.com/blog/blog.php?id=hicch2kjaab


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM