node.js - nginx 作为 NodeJS+socket.io 的代理 : everything is OK except for big messages

标签 node.js nginx websocket socket.io

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/

相关文章:

javascript - 在 express 路由器中使用 redis 客户端

javascript - 查询不能直接在具有打开事务的 session 上运行;从事务内运行或使用不同的 session

node.js - Amazon SES SendRawEmail (Node.JS) 中的电子邮件未显示 To :, Cc 和 Bcc

http - 将 PUT HTTP 请求代理到 AWS S3 失败

django LOGIN_REDIRECT_URL 在 nginx ssl 后面不工作

mysql - 验证 Web 套接字中的 url 参数握手 - 玩 scala

gwt - 在 GWT 的 DevMode 中使用 Websockets

selenium - 面临 Safari 5 和 Selenium-WebDriver 的问题

node.js - 如何更改 React 中index.html 的路径/文件名?

python - AWS EB docker 应用程序 : why to configure nginx twice?