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

时间:2013-04-26 23:19:26

标签: 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。

1 个答案:

答案 0 :(得分:2)

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