nginx配置websocket支持wss

和前端联调完项目之后,将项目部署到了开发环境上面。结果这时候发现ws连接报错了,怎么回事,明明和前端在本地都联调好了的!
在这里插入图片描述
观察报错发现,提示我们需要使用wss连接,而我和前端在对接联调时使用的是ws连接。
这里简单描述一下wss和ws的区别,就和https和http一样,一个是安全的一个是非安全的。
之所以部署到环境上之后就报这个是因为环境上在ng里配置使用了https,而websocket协议其实是在http/https协议基础之上进行开发的一个协议。因此当http升级未https之后,websocket也要变更为对应的wss连接。
因此,首先修改前端发起的请求为wss
在这里插入图片描述
修改完前端请求之后我们需要修改nginx的配置文件,将其代理到真实服务器的ws://ip:port地址上去
在网上搜索修改nginx支持websocket一般都是类似下面这种,参考nginx配置websocket

# HTTPS server
    #websocket服务https配置
   server {
    listen 443;
    server_name im.wonyen.com;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   cert/xxxxxxx684.pem;
    ssl_certificate_key  cert/xxxxxxx850684.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
            #root html;
            #index index.html index.htm;
            proxy_pass http://ws.com;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_read_timeout 7200s;
        }
    }

其实对于原作者来说这个配置来说对他是对的,但是对我来说我需要改动一些东西才能用
下面后红框中的是ssl证书相关的一些东西,这些在配置https的时候再ng里已经配置了,所以我不去动他(左边是我的配置)
在这里插入图片描述
我们需要根据自身情况适配的主要是下面的红框中的地方
在这里插入图片描述
首先说明一下前端的请求

wss://${host}/websocket/${state.taskId}

这里的host前端获取到的是172.31.134.17:8440 也就是说最后前端发起的请求url是wss://172.31.134.17:8440/websocket/${state.taskId}
因此,监听的端口对于我来说我需要改为8440,而server_name就是172.31.134.17,因为个ip就是ng所在机器的ip,所以我改成了localhost
再说说location这里,因为其他https的接口也是请求的8440端口。所以我这里肯定不能用location /来匹配全部,我用了location /websocket/ 来匹配固定前缀的请求 参考nginx location配置详解
proxy_pass就是我们要代理转发到哪里去,我们是要发到我们的后端服务器上去,对于我来说也就是10.128.8.5:18090 这里可以自己用websocket在线测试测试一下
在这里插入图片描述

正常情况下肯定是能联通的,而ng的作用就是将前端的 wss://172.31.134.17:8440/websocket/${state.taskId} 这个链接转发成 ws://10.128.8.5:18090/websocket/TASK1670828742801 这个链接

最后就是由于使用了nginx进行转发,所以必须设置proxy_read_timeout为更长的时间,否则websocket会在proxy_read_timeout时间内断线。我们在这个特定的location中配置proxy_read_timeout,将不会影响其他的请求在该项目上的配置。

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值