nginx代理websocket无法链接到服务,服务端报错:Handshake failed due to invalid Upgrade header: null

目录

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


一、场景

1、使用nginx代理websocket

2、websocket无法成功连接到服务端

3、服务端报错

4、nginx日志正常,没有发现与该websocket地址有关的报错


二、问题表现

1、前端表现如下

nginx代理websocket无法链接到服务,服务端报错:Handshake failed due to invalid Upgrade header: null_第1张图片


三、排查

1、协议是否使用有误,从上面的截图可以看出,websocket使用的是wss,那么nginx代理时,使用的协议是否是https

检查结果:nginx代理时使用的协议是https,这里就不把ssl相关配置贴出来了


2、检查改地址是否能正常访问

在这里插入图片描述

因为只是为了确认地址是否访问正常,这里将wss替换为https

检查结果:可以正常访问


3、查看nginx日志是否存在异常信息

打开nginx日志文件,搜索有问题的代理地址,查看响应码

nginx代理websocket无法链接到服务,服务端报错:Handshake failed due to invalid Upgrade header: null_第2张图片

检查结果:没有发现与该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 "";

你可能感兴趣的:(Nginx,Java开发问题,nginx,websocket)