nginx作为NodeJS + socket.io的代理:除了大消息外,一切正常

adr*_*ien 5 nginx websocket node.js socket.io

正如在nginx的网站上所解释的那样,我已经使用这些设置为我的nginx代理websockets到NodeJS服务器:

location /socket.io/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
Run Code Online (Sandbox Code Playgroud)

一切正常,socket.emit()/ socket.on()互相发送消息; 直到我发送一条相当大的短信(26 kB的html).

  • NodeJS没有收到这条大消息(所以我猜这个问题是在nginx方面)
  • nginx日志没有错误
  • 一旦客户发送了这条大消息,NodeJS将停止从该客户端接收socket.io的心跳.

我究竟做错了什么?是否有我不知道的nginx设置?

adr*_*ien 5

找到的“解决方案”是使用haproxy在 nginx 和 NodeJS 之间分割 tcp 流。

它不是最佳的,因为它在我们的堆栈中添加了另一个程序,但它完成了工作。

在我看来,nginx websocket 支持还远未达到生产就绪状态。