NGINX挂在封闭的websocket上游连接上

时间:2016-06-19 18:51:28

标签: nginx

我正在利用upstream块来平衡两个nodejs个实例:

upstream Balancer {
   least_conn; 
   server 127.0.0.1:9300; 
   server 127.0.0.1:9301; 
}

位置指令:

    location = /Balancer {
                    proxy_pass http://Balancer;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection $connection_upgrade;
        }

一切正常。但是,如果9301实例发生故障,并且当新玩家连接到Balancer指令时,nginx会挂起并且无法连接到9300(这是只有一个活着)。似乎它仍在尝试连接到9301 ......已经死了。

我尝试了weight选项,如下所示:

upstream Balancer {
   least_conn; 
   server 127.0.0.1:9300 weight=1; 
   server 127.0.0.1:9301 weight=2; 
}

这可能是nginx问题还是我的配置错了?

1 个答案:

答案 0 :(得分:0)

我错过了proxy_connect_timeout 1s;设置。

        location = /Balancer {
                proxy_connect_timeout 1s;
                proxy_pass http://Balancer;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
        }

现在一切正常。看起来nginx现在等待大约1s来测试是否有效连接,如果没有,它会移动到下一个服务器。必须启用此设置或连接将挂起。 (这可能是有意的,或者是一个错误,不确定)