Nginx负载平衡不适用于NodeJS吗?

时间:2019-01-02 18:06:16

标签: node.js nginx

我有一个NodeJS脚本,想运行带有NGINX负载均衡功能的用户。

我在NodeJS中给出地址

console.log(server.address());

这回馈了

{ address: '::', family: 'IPv6', port: 2055 }
{ address: '::', family: 'IPv6', port: 2055 }
{ address: '::', family: 'IPv6', port: 2055 }
对于所有用户,

每次都使用相同的端口。网站上的20-30。 但是为什么都一样?

那是我的nginx设置

upstream nodes {
    ip_hash;

    server localhost:2055;
    server localhost:2056 weight=5;
    server localhost:2057;
}

我还给2056进行了更多的测试,但是在其他服务器上没有人比2055更好... 而且可以肯定的是,更改后我会进行service nginx reload

那是我在nginx中站点的位置

location / {
            add_header "Access-Control-Allow-Origin" "*" always;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_pass http://nodes;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }

这就是我在nodejs上启动的服务器

server.listen(2055);
server.listen(2056);
server.listen(2057);

多数民众赞成在代码的末尾(底部) 我的意思是,该网站正在运行,但是server.address()仅返回2055。

我把它放在这里

io.on('connection', function(socket) {  
    console.log(server.address());

Any Ideas如何检查这仅仅是一个日志错误,以及如何检查其他端口是否正在运行?

1 个答案:

答案 0 :(得分:0)

docs

  

通过ip-hash,客户端的IP地址用作哈希键,以确定应为客户端的请求选择服务器组中的哪台服务器。此方法可确保将来自同一客户端的请求始终定向到同一服务器,除非该服务器不可用。

所以改变

upstream nodes {
   ip_hash;

   server localhost:2055;
   server localhost:2056 weight=5;
   server localhost:2057;
}

upstream nodes {
   server localhost:2055;
   server localhost:2056 weight=5;
   server localhost:2057;
}

应该为您提供加权的负载平衡。