无法使用node.js和nginx与socket.io连接 [英] Unable to connect with socket.io using node.js and nginx

查看:97
本文介绍了无法使用node.js和nginx与socket.io连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've set up a socket.io with node.js running behind nginx. The main domain is running on nginx and sub-domain is being proxied to node.js. All the REST APIs are working fine, but when it comes to socket connections, I do see the handshake in the logs, but client is not able to get response apparently. Below is the log from node.js, and further below are the configs I'm using. Any ideas why it's not working?

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中运行.

Socket.io is running in 127.0.0.1:3000.

推荐答案

您是否正在运行足够新的Nginx版本?在Nginx版本1.3.13中引入了WebSocket支持. nginx -v查看您使用的版本.另请参见 https://chrislea.com/2013/02/23/proxying-websockets-with-nginx/

Are you running a new enough version of nginx? WebSocket support was introduced in nginx version 1.3.13. nginx -v to see what version you have. See also https://chrislea.com/2013/02/23/proxying-websockets-with-nginx/

这篇关于无法使用node.js和nginx与socket.io连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆