nginx同时配置express和websocket代理

 0 0条评论

nodejs+express开发的api,其中还是用ws服务,代码大致如下:

import ws from 'ws'//引入模块
const wss = new ws.Server({ port: 8080 },()=>{
  console.log('创建websocket服务在8080端口')
})//创建一个WebSocketServer的实例,监听端口8080
wss.on('connection', async (ws, req) => {
  // 实现自己的逻辑
}

项目同时也有express的服务,在入口文件index.ts中,引入websocket模块

import '@/router/websocket'

这样在项目启动时,就会启动websocket服务,如下:


现在就要配置nginx代理了,至于代理https我就不叙说了,网上一大堆,这里我说一下如何配置ws代理。

location /wss/ {
    proxy_pass http://127.0.0.1:8080/;        #websocket的项目
    proxy_http_version 1.1;    
    proxy_set_header Upgrade $http_upgrade;    
    proxy_set_header Connection "Upgrade";    
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
}

主要就是第一行代码,当访问wss目录时,就会跳转到内网的8080端口。

客户端连接代码如下:

const createWebSocket = () => {
    try {
        ws = new WebSocket(`wss://你的域名/wss/?token=${token.$state.access_token.key}`)
        initWebSocket()
    }
    catch (e) {
        console.log(e)
        createWebSocket()
    }
}

这样就能通过域名并且是ssl方式访问远程的websockt服务啦。

本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客