Ubuntu 上部署 Node.js 负载均衡的实用方案
一 方案总览
- 使用 Nginx 或 HAProxy 作为反向代理/负载均衡器,将请求分发到多个 Node.js 实例,适合生产环境,配置简单、稳定且具备健康检查、日志与多种调度策略。
- 在单机上用 Node.js 集群模式(cluster) 充分利用多核 CPU,属于进程内扩展,可与前两种方案叠加使用(进程内多实例 + 外部负载均衡器)。
二 使用 Nginx 作为反向代理
- 安装与启用
- 安装:sudo apt update && sudo apt install nginx
- 验证:sudo nginx -t
- 热重载:sudo systemctl reload nginx
- 基本配置示例(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf 的 http 块内)
- 定义上游与转发规则,注意为 HTTP/1.1 与 WebSocket 设置升级头;多实例示例包含 3000/3001/3002。
- 可按需调整负载均衡策略(如 least_conn、ip_hash、权重)。
- 配置片段
- http {
upstream node_app {
least_conn; # 最少连接
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=2;
server 127.0.0.1:3002;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://node_app;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘Upgrade’;
proxy_cache_bypass $http_upgrade;
}
}
}
三 使用 HAProxy 作为负载均衡器
- 安装与启用
- 安装:sudo apt update && sudo apt install haproxy
- 验证:sudo haproxy -c -f /etc/haproxy/haproxy.cfg
- 重启:sudo systemctl restart haproxy
- 基本配置示例(/etc/haproxy/haproxy.cfg)
- 定义前端监听 :80,后端使用 roundrobin 调度并开启 check 健康检查;可按需改为 leastconn、source/ip-hash 等策略。
- 配置片段
- global
log /dev/log local0
log /dev/log local1 notice
daemon
maxconn 256
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server node1 127.0.0.1:3000 check
server node2 127.0.0.1:3001 check
server node3 127.0.0.1:3002 check
四 应用侧与运维要点
- 启动多个 Node.js 实例
- 建议将应用绑定到 127.0.0.1 各端口(如 3000/3001/3002),由负载均衡器对外暴露 80/443;生产环境使用 PM2 或 systemd 管理进程与自动重启。
- 健康检查与摘除
- Nginx 可用 max_fails/fail_timeout 与 proxy_next_upstream 配合实现故障摘除;HAProxy 使用 check 参数即可,必要时配置 httpchk 做应用层健康检查。
- 会话保持
- 无状态应用优先;有状态场景可用 ip_hash(Nginx)或 source(HAProxy)实现会话粘滞,或引入 Redis 等集中会话存储。
- 静态资源与压缩
- 将静态文件由 Nginx 直接服务,开启 gzip/brotli 压缩,降低 Node.js 负载并提升首屏性能。
- 安全与合规
- 仅暴露 80/443,在负载均衡器或边缘终止 TLS;设置合适的 security headers(如 CSP、X-Frame-Options、X-XSS-Protection);限制请求速率与并发连接。
- 日志与观测
- 启用 access/error 日志与 status 页面(HAProxy),结合 Prometheus + Grafana 或 ELK 做指标与链路追踪,持续观测 5xx、延迟与后端健康分布。