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)
任何帮助将不胜感激.我尝试了在这个问题中提出的解决方案,但这也没有用.
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