温馨提示×

debian nodejs如何做负载均衡

小樊
44
2026-09-07 16:27:30
栏目: 云计算

在 Debian 上用 Node.js 做负载均衡,常见做法有 应用层(Node 自身)系统/服务层(反向代理) 两类。下面按实战角度给你一个清晰方案。


一、最常见方案:Nginx + 多个 Node 实例(推荐)

1. 启动多个 Node 服务

假设你的 Node 应用监听不同端口:

node app.js --port 3000
node app.js --port 3001
node app.js --port 3002

或用 PM2(推荐):

npm install -g pm2
pm2 start app.js -i 4   # 4 个进程

2. 安装 Nginx(Debian)

sudo apt update
sudo apt install nginx

3. 配置 Nginx 负载均衡

编辑配置:

sudo nano /etc/nginx/sites-available/node-lb

示例(轮询):

upstream node_cluster {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;
    server_name example.com;

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

启用:

sudo ln -s /etc/nginx/sites-available/node-lb /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

✅ 优点:简单、稳定、生产级


二、负载均衡策略(Nginx)

轮询(默认)

upstream node_cluster {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

加权

server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=1;

IP Hash(会话保持)

upstream node_cluster {
    ip_hash;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

最少连接

least_conn;

三、Node.js 自身做负载均衡(Cluster)

适合单台服务器多核:

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  os.cpus().forEach(() => cluster.fork());
} else {
  require('./app');
}

⚠️ 只能本机,不能跨服务器


四、跨服务器负载均衡

方案 1:Nginx + 多台 Debian 服务器

upstream node_cluster {
    server 192.168.1.10:3000;
    server 192.168.1.11:3000;
}

方案 2:HAProxy(性能更好)

sudo apt install haproxy

五、生产建议

  • ✅ 用 Nginx + PM2
  • ✅ WebSocket 要配置 proxy_http_version 1.1
  • ✅ 静态资源交给 Nginx
  • ✅ HTTPS 用 Let’s Encrypt

如果你愿意,可以告诉我:

  • 单台还是多台服务器?
  • 是否用 Docker?
  • 是否涉及 WebSocket / 长连接?

我可以直接给你一份 可复制的配置

0