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";
配置上这一段的,然后就找运维配置上了之后,发现,真的成功了,也是一个从来没有遇到过的问题,特此记录之!!!
原文地址:https://blog.51cto.com/longithome/2486543
时间: 2024-10-17 05:27:56