一、场景
1、使用nginx代理websocket
2、websocket无法成功连接到服务端
3、服务端报错
4、nginx日志正常,没有发现与该websocket地址有关的报错
二、问题表现
1、前端表现如下
三、排查
1、协议是否使用有误,从上面的截图可以看出,websocket使用的是wss
,那么nginx代理时,使用的协议是否是https
检查结果:nginx代理时使用的协议是https,这里就不把ssl相关配置贴出来了
2、检查改地址是否能正常访问
因为只是为了确认地址是否访问正常,这里将wss替换为https
检查结果:可以正常访问
3、查看nginx日志是否存在异常信息
打开nginx日志文件,搜索有问题的代理地址,查看响应码
检查结果:没有发现与该websocket地址有关的异常日志
4、查看服务端日志是否存在异常信息
确实存在异常信息
Line 2234: 2023-10-20 09:45:24.524 - [ERROR] - [http-nio-8083-exec-5] - [o.s.w.s.server.support.DefaultHandshakeHandler - line:296]: Handshake failed due to invalid Upgrade header: null
Line 2237: 2023-10-20 09:45:55.066 - [ERROR] - [http-nio-8083-exec-9] - [o.s.w.s.server.support.DefaultHandshakeHandler - line:296]: Handshake failed due to invalid Upgrade header: null
Line 2239: 2023-10-20 09:46:15.357 - [ERROR] - [http-nio-8083-exec-6] - [o.s.w.s.server.support.DefaultHandshakeHandler - line:296]: Handshake failed due to invalid Upgrade header: null
Line 2277: 2023-10-20 09:47:02.509 - [ERROR] - [http-nio-8083-exec-10] - [o.s.w.s.server.support.DefaultHandshakeHandler - line:296]: Handshake failed due to invalid Upgrade header: null
Line 2284: 2023-10-20 09:48:12.092 - [ERROR] - [http-nio-8083-exec-8] - [o.s.w.s.server.support.DefaultHandshakeHandler - line:296]: Handshake failed due to invalid Upgrade header: null
Line 2291: 2023-10-20 09:49:22.683 - [ERROR] - [http-nio-8083-exec-3] - [o.s.w.s.server.support.DefaultHandshakeHandler - line:296]: Handshake failed due to invalid Upgrade header: null
检查结果:websocket的链接请求确实到达了服务端,但因为某些原因无法建立连接
报错信息“Handshake failed due to invalid Upgrade header: null
”翻译后是“由于无效的升级头,握手失败
”
可以看出,异常还是出在nginx
5、检查nginx配置
发现nginx代理配置少了一行文章来源:https://www.toymoban.com/news/detail-784289.html
location /FS_WEB_ASS {
proxy_pass http://192.168.1.133:8083/FS_WEB_ASS;
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 $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $http_host;
# 少了下面这行配置,加上后问题得到解决
proxy_set_header Origin "";
proxy_read_timeout 86400s;
proxy_send_timeout 60s;
proxy_connect_timeout 60s;
}
四、原因
nginx代理配置缺少以下配置文章来源地址https://www.toymoban.com/news/detail-784289.html
proxy_set_header Origin "";
到了这里,关于nginx代理websocket无法链接到服务,服务端报错:Handshake failed due to invalid Upgrade header: null的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!