目录

一、场景二、问题表现三、排查四、原因

一、场景

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代理配置少了一行

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代理配置缺少以下配置

proxy_set_header Origin "";

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: