在node.js服务器上使用nginx时,“websocket连接无效”

我正在使用Express.js创build一个服务器,我可以使用networking套接字连接。

即使它最终似乎工作(即,连接并将事件传递给客户端),我最初在Chrome的控制台中出现错误:

意外的回应码:502

在后端,socket.io只loggingwarn - websocket connection invalid

但是,nginxlogging这个:

2012/02/12 23:30:03 [error] 25061#0:* 81上游过早closures连接,同时从上游读取响应头,客户端:71.122.117.15,服务器:www.example.com,请求:“GET / socket .io / 1 / websocket / 1378920683898138448 HTTP / 1.1“,上游:” http://127.0.0.1:8090/socket.io/1/websocket/1378920683898138448 “,主机:”www.example.com“

注意:我有nginx开发运行: nginx version: nginx/1.1.14所以它应该支持HTTP / 1.1。

另外请注意,如果我只是使用没有nginx的node.js服务器,它没有任何警告。

最后,这是我的nginxconfiguration文件:

 server { listen 0.0.0.0:80; server_name www.example.com; access_log /var/log/nginx/example.com.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_pass http://node; proxy_redirect off; } } upstream node { server 127.0.0.1:8090; } 

任何帮助将不胜感激。 我尝试了这个问题中提出的修复,但也没有工作。

nginx只在不稳定的1.1分支中有某种Web Socket支持。 请参阅Socket.IO 维基 。

Afaik目前只有少数稳定的基于Node.js的http代理可以正确支持Web套接字。

查看node-http-proxy(我们使用这个):

https://github.com/nodejitsu/node-http-proxy

和有弹性:

https://github.com/substack/bouncy

或者你可以使用纯粹的TCP代理,如HAproxy

更新!

nginx(1.3.13> =)支持开箱即用的websocket!

http://nginx.org/en/docs/http/websocket.html