部署新环境Websocket不能建立成功

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署新环境Websocket不能建立成功相关的知识,希望对你有一定的参考价值。

1.背景:在原来已经写好的项目,需要重新部署一套新的环境,这里主要是nginx , 和项目代码。 2.问题:在代码没有改动的前提下,页面上建立websocket 总是建立不成功,不成功的主要原因是报了603(603是我们后台自定义的错误编码,是请求后缀不正确的错误,这个其实不重要) 3.排查原因:在后台搜索603的错误code,发现是在一个Handler 中处理而设置的code,这个Handler主要是处理请求是否合法以及登录token的验证逻辑。但是现在在建立websocket的时候,却进入了这里呢? 4.问题分析:在本地跟踪调试代码,发现如果是websocket建立的时候,发起的请求,正常 的是不会走到这个preHandler 里面的,但是部署的新环境却进到了这个方法中,所以我做了一个猜想:就是浏览器发起websocket的时候,进入到后台却是一个普通的Http请求,这里突然就想到websocket所用的协议和Http的协议是不同的,当我再看websocket建立链接的请求的时候,发现请求头中有nginx , 然后我就开始怀疑nginx 默认是否支持websocket 。 5.解决办法:查找了一圈之后,就发现如果nginx支持websocket协议的话,是需要在nginx 的配置中的server内配置
         // 启用支持websocket连接
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

配置上这一段的,然后就找运维配置上了之后,发现,真的成功了,也是一个从来没有遇到过的问题,特此记录之!!!

以上是关于部署新环境Websocket不能建立成功的主要内容,如果未能解决你的问题,请参考以下文章

小程序WebSocket通过F5无法转发问题解决

系统网页提示Wedstorkte未建立连接

如何在UL中迭代使用appendChild和片段LI?

python实现建立websocket通信

如何将 Node.js WebSocket 服务器部署到 Amazon Elastic Beanstalk?

使用部署在 CentOS 服务器上的 Latchet 框架时,无法从 webapp 的 JS 建立 websocket 连接