一、場景
1、使用nginx代理websocket
2、websocket無法成功連接到服務(wù)端
3、服務(wù)端報錯
4、nginx日志正常,沒有發(fā)現(xiàn)與該websocket地址有關(guān)的報錯
二、問題表現(xiàn)
1、前端表現(xiàn)如下
三、排查
1、協(xié)議是否使用有誤,從上面的截圖可以看出,websocket使用的是wss
,那么nginx代理時,使用的協(xié)議是否是https
檢查結(jié)果:nginx代理時使用的協(xié)議是https,這里就不把ssl相關(guān)配置貼出來了
2、檢查改地址是否能正常訪問
因為只是為了確認(rèn)地址是否訪問正常,這里將wss替換為https
檢查結(jié)果:可以正常訪問
3、查看nginx日志是否存在異常信息
打開nginx日志文件,搜索有問題的代理地址,查看響應(yīng)碼
檢查結(jié)果:沒有發(fā)現(xiàn)與該websocket地址有關(guān)的異常日志
4、查看服務(wù)端日志是否存在異常信息
確實存在異常信息
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
檢查結(jié)果:websocket的鏈接請求確實到達(dá)了服務(wù)端,但因為某些原因無法建立連接
報錯信息“Handshake failed due to invalid Upgrade header: null
”翻譯后是“由于無效的升級頭,握手失敗
”
可以看出,異常還是出在nginx
5、檢查nginx配置
發(fā)現(xiàn)nginx代理配置少了一行文章來源:http://www.zghlxwxcb.cn/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代理配置缺少以下配置文章來源地址http://www.zghlxwxcb.cn/news/detail-784289.html
proxy_set_header Origin "";
到了這里,關(guān)于nginx代理websocket無法鏈接到服務(wù),服務(wù)端報錯:Handshake failed due to invalid Upgrade header: null的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!