我的机器上有3个cpu核心,我有3个节点运行实例,每个核心一个。当我直接访问这样的服务器时,这是一个始终被调用的主进程。但是,当我使用反向nginx代理时,该过程是随机的。 nginx在哪里选择运行哪个节点进程?
http://domain.com:1000 -> proxy
http://domain.com:2000 -> node processes
Nginx配置:
server {
listen 1000;
server_name node;
location / {
proxy_pass http://domain.com:2000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
答案 0 :(得分:1)
Nginx不了解您的后端群集,就像您配置它一样。正如对原始问题的评论中所述,Nginx负载平衡仅适用于使用多个后端进行配置的情况。你没有这样做。
因此,如果你的后端本身就像NodeJS一样使用Cluster模块,那么就会发生负载均衡。 Node不需要Nginx的任何“帮助”来做到这一点 - 它有自己的机制。它们在https://nodejs.org/api/cluster.html#cluster_how_it_works中描述:
群集模块支持两种分发传入连接的方法。
第一个(除了Windows之外的所有平台上的默认设置)是循环法,主进程侦听端口,接受新连接并以循环方式在工作者之间分发它们,使用一些内置的智能来避免工作进程过载。
第二种方法是主进程创建侦听套接字并将其发送给感兴趣的工作者。然后工人直接接受传入的连接。
因此,您可以选择在节点后端中使用它的方式。目前,你告诉Nginx总是去2000端口,因此你运行的任何东西都可以获得流量。如果这是节点群集的主进程,它将循环负载平衡。如果那是童工之一,那么该童工将获得所有流量而其他人将不会获得任何流量。