无法使用node.js和nginx与socket.io连接

时间:2013-05-19 01:31:14

标签: node.js nginx socket.io

我已经设置了一个socket.io,其中node.js在nginx后面运行。主域在nginx上运行,子域正在代理node.js.所有REST API都运行正常,但是当涉及到套接字连接时,我确实看到了日志中的握手,但客户端显然无法获得响应。下面是来自node.js的日志,下面是我正在使用的配置。任何想法为什么它不起作用?

info  - handshake authorized 7WtMDKRY1tPb97CORlJ4
debug - setting request GET /socket.io/1/websocket/7WtMDKRY1tPb97CORlJ4
debug - set heartbeat interval for client 7WtMDKRY1tPb97CORlJ4
debug - client authorized for 
debug - websocket writing 1::
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client JoDWOVTvLg7SdYpNRlJ2
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/xhr-polling/7WtMDKRY1tPb97CORlJ4?t=1368925686996
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client 7WtMDKRY1tPb97CORlJ4
debug - setting request GET /socket.io/1/jsonp-polling/7WtMDKRY1tPb97CORlJ4?t=1368925696997&i=0
debug - setting poll timeout
debug - discarding transport
debug - clearing poll timeout
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client 7WtMDKRY1tPb97CORlJ4
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/7WtMDKRY1tPb97CORlJ4?t=1368925717060&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 7WtMDKRY1tPb97CORlJ4
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client 7WtMDKRY1tPb97CORlJ4
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/7WtMDKRY1tPb97CORlJ4?t=1368925737199&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 7WtMDKRY1tPb97CORlJ4
debug - fired close timeout for client JoDWOVTvLg7SdYpNRlJ2
info  - transport end (close timeout)

Nginx配置:

upstream app_yourdomain {
    server 127.0.0.1:3000;
}

# the nginx server instance
server {
    listen 80;
    server_name mydomain.com;

    # pass the request to the node.js server with the correct headers and much more can be added, see nginx config options
    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";

      tcp_nodelay on;
      proxy_pass http://app_yourdomain/;
      proxy_redirect off;
    }
 }

Socket.io在127.0.0.1:3000中运行。

1 个答案:

答案 0 :(得分:2)

你是否正在运行一个足够新的nginx版本?在nginx版本1.3.13中引入了WebSocket支持。 nginx -v查看您拥有的版本。另请参阅https://chrislea.com/2013/02/23/proxying-websockets-with-nginx/