我正在使用Socket.IO在我的Node.js应用程序中。今天我第一次部署它,然后发现我的sockets不停地重新连接。我在各自的socket事件中记录了“connect”和“disconnect”,以下是结果:
此外,当我的浏览器肯定足够现代以使用WebSockets时,似乎正在使用轮询技术 - 因此我认为这是配置问题。当我在没有中间代理的情况下运行Node.js时,WebSockets正常工作。
这是我的Nginx配置,它作为我的Node.js服务器的代理:
此外,当我的浏览器肯定足够现代以使用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至关重要(请参阅此参考/教程)。在添加它们之前,代理无法使用WebSockets。现在似乎可以获得轮询,虽然不是最好的方法。
我的Nginx版本是1.4.0稳定版。