6

正如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";
}

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

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

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

4

2 回答 2

4

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

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

在我看来,nginx websocket 支持离生产就绪还很远。

于 2013-05-21T09:53:16.070 回答
1

尝试在您的配置中添加这些:

proxy_buffers 8 2m;
proxy_buffer_size 10m;
proxy_busy_buffers_size 10m;

原因:proxy_buffer 默认大小为 4K 或 8K。因此,在大消息导致缓冲区溢出后,它可能会丢弃这些连接。检查此处的默认设置,使其符合您的要求。

于 2013-05-16T17:02:59.880 回答