如 nginx's website 中所述我已将这些设置用于我的 nginx 以将 websocket 代理到 NodeJS 服务器:
location /socket.io/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
一切正常,socket.emit()/socket.on() 相互发送消息;直到我发送了一条相当大的短信(26 kB 的 html)。
- NodeJS 没有收到这条大消息(所以我猜问题出在 nginx 方面)
- nginx 日志没有错误
- 一旦客户端发送了这个大消息,NodeJS 将停止从该客户端接收 socket.io 的心跳。
我做错了什么? 是否有我不知道的 nginx 设置?
最佳答案
找到的“解决方案”是使用 haproxy在 nginx 和 NodeJS 之间拆分 tcp 流。
它不是最优的,因为它在我们的堆栈中添加了另一个程序,但它完成了工作。
在我看来,nginx websocket 支持距离生产就绪还很遥远。
关于node.js - nginx 作为 NodeJS+socket.io 的代理 : everything is OK except for big messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16543787/