sockets - Socket.io/WebSockets 不断重新连接——Nginx 代理配置有问题吗?

标签 sockets proxy nginx websocket socket.io

我在我的 Node.js 应用程序中使用 Socket.IO。今天我第一次部署它,我注意到我的套接字不断重新连接。我在相应的套接字事件中将“连接”和“断开连接”记录到控制台,结果如下:

此外,当我的浏览器确实足够现代以使用 WebSockets 时,似乎正在使用轮询技术 — 所以我认为这是一个配置问题。当我在开发中运行 Node.js 而中间没有代理时,WebSockets 工作正常。

这是我的 Nginx 配置,它充当我的 Node.js 服务器的代理:

upstream reader.oliverjash.me {
  server 127.0.0.1:3000;
}

server {
  listen 80;
  server_name reader.oliverjash.me;
  access_log /var/log/nginx/reader.oliverjash.me.access.log;
  error_log /var/log/nginx/reader.oliverjash.me.error.log;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_pass http://reader.oliverjash.me;
    proxy_redirect off;
  }
}

我相信这些台词:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

在启用 WebSockets 方面很重要(根据 this reference/tutorial )。在我添加这些之前,WebSockets 根本无法与代理一起工作。现在我似乎得到了轮询,总比没有好。

我的 Nginx 版本是 1.4.0 稳定版。

最佳答案

原来问题是因为我对我的 Node 应用程序进行了集群。添加 Redis 作为 Socket.IO 的内存存储,这解决了我所有的问题! http://adamnengland.wordpress.com/2013/01/30/node-js-cluster-with-socket-io-and-express-3/

关于sockets - Socket.io/WebSockets 不断重新连接——Nginx 代理配置有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246564/

相关文章:

python - 使用 Selenium Chrome 的代理 SOCKS 5 身份验证

node.js - NodeJS + Nginx + Cloudflare

django - AWS 中的静态文件配置不起作用

c# - 如何启用 nginx 反向代理以在 .Net 核心中与 gRPC 一起使用?

sockets - 通过 Akka IO 和套接字的 Protocol Buffer 消息

Python/套接字 : How to send multi messages without waiting the respond?

ios - 在 Objective-C 中从 NSStream、CFStream 或 Socket 获取 OSX 上的对等 IP 地址和端口

java - Java 的 ProxySelector 不能与自动代理配置脚本一起使用吗?

java - 如何使用 spring 集成在 TCP 连接上实现保持连接?

node.js - 如何使用免费的 Dyno 在 Heroku 上使用 NodeJS 进行代理?