【发布时间】:2013-04-21 05:24:44
【问题描述】:
我在我的 Node.js 应用程序中使用 Socket.IO。今天我第一次部署它,我注意到我的套接字不断重新连接。我在相应的套接字事件中将“连接”和“断开连接”记录到控制台,结果如下:
此外,似乎正在使用轮询技术,而我的浏览器肯定足够现代,可以使用 WebSockets — 所以我认为这是一个配置问题。当我在开发中运行 Node.js 且中间没有代理时,WebSocket 可以正常工作。
这是我的 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 稳定版。
【问题讨论】:
标签: sockets proxy nginx websocket socket.io