我在我的 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/