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";
配置上这一段的,而后就找运维配置上了以后,发现,真的成功了,也是一个历来没有遇到过的问题,特此记录之!!!nginx