Linux Node.js 配置中如何进行负载均衡
导读:Linux 上 Node.js 负载均衡实践指南 一 架构选型与适用场景 使用 Nginx/HAProxy 反向代理:适合多实例、多机器的生产环境,提供健康检查、会话保持、SSL/TLS 终止、压缩与缓存等能力,稳定且运维成熟。 使用 N...
Linux 上 Node.js 负载均衡实践指南
一 架构选型与适用场景
- 使用 Nginx/HAProxy 反向代理:适合多实例、多机器的生产环境,提供健康检查、会话保持、SSL/TLS 终止、压缩与缓存等能力,稳定且运维成熟。
- 使用 Node.js 内置 Cluster:在同一台机器上利用多核 CPU,主进程管理多个工作进程共享端口,默认采用操作系统内核的轮询分发,实现单机并发能力提升。
- 使用 Node.js 自写或中间件代理(如 http-proxy / http-proxy-middleware):适合开发/边缘路由或轻量场景,便于在 Node 层做路由与策略,但在高并发与可靠性上不及专业负载均衡器。
二 使用 Nginx 进行负载均衡
- 安装与启用
- Ubuntu/Debian:sudo apt update & & sudo apt install -y nginx
- 启动与开机自启:sudo systemctl enable --now nginx
- 配置示例(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf 的 http 段内)
- 定义上游节点与策略,启用健康检查与长连接;反向代理到多个 Node 实例(示例为 3000/3001/3002)。
- 启用后执行:sudo nginx -t & & sudo systemctl reload nginx
- 关键配置要点
- 负载均衡策略:默认 round-robin;可按需改为 least_conn、ip_hash(会话保持)等。
- HTTP/1.1 与升级头:支持 WebSocket 时需设置 proxy_http_version 1.1 与 Upgrade/Connection 头。
- 传递客户端信息:设置 Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,便于后端获取真实来源与协议。
- 健康检查和故障隔离:配置 server 行后 check 参数(Nginx Plus 更完善;开源版可用 max_fails/fail_timeout 间接实现)。
- 静态资源:对静态文件设置 proxy_cache 或交由 Nginx 直接服务以减轻 Node 压力。
- 安全与优化:开启 ssl(推荐 TLS 1.2+)、HSTS、gzip,设置合理的 timeouts 与 client_max_body_size。
三 使用 HAProxy 进行负载均衡
- 安装与启用
- Ubuntu/Debian:sudo apt update & & sudo apt install -y haproxy
- 启用服务:sudo systemctl enable --now haproxy
- 配置示例(/etc/haproxy/haproxy.cfg)
- 定义前端监听 80/443,后端使用 roundrobin 分发到多个 Node 实例(示例为 3000/3001/3002),开启 HTTP 日志 与 健康检查。
- 启用后执行:sudo haproxy -c -f /etc/haproxy/haproxy.cfg & & sudo systemctl reload haproxy
- 关键配置要点
- 负载均衡算法:支持 roundrobin、leastconn、source(会话保持)等。
- 健康检查:server 行后 check 参数自动探测 HTTP/HTTPS 存活。
- 统计页面:配置 stats uri /haproxy?stats 便于观测后端健康与流量。
- 超时与重试:合理设置 timeout connect/client/server,必要时配置 retries。
- 高级能力:支持 ACL、HTTP/2、gzip、TLS 终止与证书管理。
四 使用 Node.js 内置 Cluster 提升单机并发
- 适用场景:单台服务器多核 CPU 的并发提升,主进程(primary/ master)监听端口并分发请求,工作进程(worker)处理业务。
- 最小可用示例
- 基于 cluster 模块,按 CPU 核心数 fork 工作进程;主进程监听 exit 事件并自动重启异常退出的 worker。
- 工作进程内启动 HTTP 服务监听同一端口(由主进程共享)。
- 运行与运维
- 建议使用 PM2 的 cluster 模式启动与管理进程:pm2 start app.js -i max(自动按核心数扩展)。
- 结合 日志、监控 与 进程守护,确保稳定性与可观测性。
五 实践建议与常见问题
- 健康检查与自动恢复:在 Nginx/HAProxy 中为后端配置 主动/被动健康检查,异常节点自动摘除;Node 层使用 uncaughtException / unhandledRejection 捕获未处理异常并安全退出,由主进程或进程管理工具重启。
- 会话保持:如需保持登录态,优先使用 无状态会话(如 JWT、Redis 集中会话),或在负载均衡器启用 ip_hash / sticky session。
- WebSocket:确保 proxy_http_version 1.1、Upgrade/Connection 头透传;HAProxy 需开启 option http-server-close 或 timeout tunnel。
- 静态资源与缓存:将 图片/CSS/JS 交由 Nginx 直接服务,API 动态请求反向代理到 Node;按需配置 Cache-Control、ETag。
- 安全加固:启用 TLS 1.2+、禁用弱加密套件,设置 安全 Headers(如 X-Frame-Options、X-XSS-Protection、Content-Security-Policy),对外仅暴露 80/443。
- 观测与排障:开启 访问日志/错误日志 与 指标(如请求耗时、5xx 比例、后端健康),结合 Nginx/HAProxy 统计页 与 PM2/Node 监控 快速定位瓶颈。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Node.js 配置中如何进行负载均衡
本文地址: https://pptw.com/jishu/775510.html
