通过Nginx反向代理处理Socket.IO请求

通过Nginx反向代理处理Socket.IO请求,nginx,websocket,socket.io,Nginx,Websocket,Socket.io,我的后端在开发过程中完美地处理API请求和Socket.IO请求。在生产环境中,我的后端仍然可以完美地处理API请求,但不会响应Socket.IO请求 似乎Socket.IO客户端连接到后端没有问题,因为它获得了带有未定义的数据的pong,并得到以下响应: HTTP/1.1 101 Switching Protocols Server: nginx/1.17.6 Date: Wed, 22 Jul 2020 08:50:51 GMT Connection: upgrade Upgrade: we

我的后端在开发过程中完美地处理API请求和Socket.IO请求。在生产环境中,我的后端仍然可以完美地处理API请求,但不会响应Socket.IO请求

似乎Socket.IO客户端连接到后端没有问题,因为它获得了带有
未定义的
数据的
pong
,并得到以下响应:

HTTP/1.1 101 Switching Protocols
Server: nginx/1.17.6
Date: Wed, 22 Jul 2020 08:50:51 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: +XXXXxxXxxX/xxxxXXXxxxxx/Xx=
Sec-WebSocket-Extensions: permessage-deflate
Strict-Transport-Security: max-age=31536000
更新1

我尝试使用连接到后端,它成功连接

更新2

以下是Socket.IO客户端日志:

socket.io-client:url parse https://staging.backend.xxx.us/dashboard
socket.io-client new io instance for https://staging.backend.xxx.us/dashboard
socket.io-client:socket emitting packet with ack id 0
socket.io-client:socket emitting packet with ack id 1
socket.io-client:socket emitting packet with ack id 2
socket.io-client:manager readyState closed
socket.io-client:manager opening https://staging.backend.xxx.us/dashboard
engine.io-client:socket creating transport "websocket"
engine.io-client:socket setting transport websocket
socket.io-client:manager connect attempt will timeout after 20000
engine.io-client:socket socket receive: type "open", data "{"sid":"fk3DbI3H-0qXRZEAAAAU","upgrades":[],"pingInterval":25000,"pingTimeout":5000}"
engine.io-client:socket socket open
socket.io-client:manager open
socket.io-client:manager cleanup
socket.io-client:socket transport is open - connecting
socket.io-client:manager writing packet {"type":0,"nsp":"/dashboard"}
socket.io-parser encoding packet {"type":0,"nsp":"/dashboard"}
socket.io-parser encoded {"type":0,"nsp":"/dashboard"} as 0/dashboard,
engine.io-client:socket flushing 1 packets in socket
engine.io-client:socket socket receive: type "message", data "0"
socket.io-parser decoded 0 as {"type":0,"nsp":"/"}
engine.io-client:socket socket receive: type "message", data "4/dashboard,"invalid signature""
socket.io-parser decoded 4/dashboard,"invalid signature" as {"type":4,"nsp":"/dashboard","data":"invalid signature"}
engine.io-client:socket writing ping packet - expecting pong within 5000ms
engine.io-client:socket flushing 1 packets in socket
engine.io-client:socket socket receive: type "pong", data "undefined"
engine.io-client:socket socket close with reason: "transport close"
socket.io-client:manager onclose
socket.io-client:manager cleanup
socket.io-client:socket close (transport close)
socket.io-client:manager will wait 690ms before reconnect attempt
socket.io-client:manager attempting reconnect
更新3

我将Socket.IO路径更改为
/
进行了测试,但没有成功,得到了相同的结果

更新4


我测试了如何将Socket.IO客户端传输更改为
轮询
,但没有成功,我得到了相同的结果。

您的连接似乎已被nginx自动关闭。您是否在nginx中设置了WebSocket支持?如果没有,请遵循此链接中的说明:


要验证这是否是导致问题的问题:请尝试在socket.io连接模式设置为仅轮询时应用程序是否工作。

我已修复该问题。在我的例子中,这是一个损坏的JWT秘密,日志也说明了这一点(查看
无效签名
部分)。我的JWT机密由于我正在使用的.

而被破坏,它似乎正确地处理了Nginx配置,正如您在我的问题中所写的
101交换协议的响应中所看到的。