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

Gez*_*zim 6 nginx node.js socket.io

我正在使用Express.js创建一个服务器,我可以使用Web套接字连接到该服务器.

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

意外的响应代码:502

在后端,socket.io只记录warn - websocket connection invalid.

但是,nginx记录了这个:

2012/02/12 23:30:03 [错误] 25061#0:*81上游过早关闭连接,同时从上游读取响应头,客户端: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 dev:nginx version: nginx/1.1.14所以它应该支持HTTP/1.1.

另请注意,如果我只使用没有nginx的node.js服务器,它可以正常工作而不会发出任何警告.

最后,这是我的nginx配置文件:

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;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.我尝试了在这个问题中提出的解决方案,但这也没有用.

Epe*_*eli 3

nginx 仅在不稳定的 1.1 分支中提供某种 Web Socket 支持。请参阅 Socket.IO维基百科

据我所知,目前只有少数稳定的基于 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>=) 支持开箱即用的 websockets!

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