[已解决]求解socket.io 在nginx上的负载均衡配置.
发布于 4个月前 作者 lonso 2084 次浏览 最后一次编辑是 3个月前 来自 问答

nginx配置如下:

map $http_upgrade $connection_upgrade {
            default upgrade;
            ''      close;
    }
upstream websocket {
            #ip_hash;
            server 10.50.127.59:3000;
            server 10.50.127.60:3000;
    }


server {
    listen       80;
    server_name localhost;

    location / {
        proxy_pass http://websocket;
        
        
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection  $connection_upgrade;
    }
}

并且即使部署成功后,建立连接非常慢. 用chrom测试,发现连接协议为jsonpolling. 求解,谢谢!

============================分割线================================================

根据实际测试得出.根据官网的配置是确实可行的. 出现这样的原因,是因为服务外网映射的问题和nodejs和socket.io无关. 内网测试正常,外网映射NAT等问题.

18 回复

我一直以为配了

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

这三句就行了的…

以及 nginx 的版本大于 1.3 吗?

比官方例子多了一组header的设置, 设置了http的header, 会影响到吧? 去掉试试

@alsotang 肯定。最新的。1.3以后才支持websocket

@fish 目测有点问题。$remote_addr 好像是设置ip_hash用的。现在hash又注释掉了。

@lonso @fish 我觉得跟那些头应该没关系

@alsotang 难道是版本的问题.目前用的是0.9的版本.用了redisstore,用sticky

@lonso 根据primus模块作者的说法,socket.io 0.9.x就是一坨……,绝对不能用。

socketio.PNG

@lonso 为何不用 1.0?

@alsotang 做的时候是0.9目前功能基本完成.不想大概动.这样玩下去.可能要升级哦.

@alsotang 目测应该和版本问题不大,服务器是通过nat映射,可能是网络上的原因,昨天测websocket连接,但是到服务器已经是jsonpolling了

@lonso 好吧。。真蛋疼。。

外网映射NAT等问题?怎么解决啊?我也遇到同样的问题

nat的问题比较复杂,特殊情况,比如移动端打洞很困难,不能保证大部分情况成功,比如webrtc有时候就不能成功。websocket是否存在这个问题不清楚,感觉这种双向通信应该会有此类问题。

@lonso 应该怎么配置呢,网络他们也不太清楚?

回到顶部