pm2配合apache实现node.js高可用的核心是分工协同:pm2负责进程守护(需用ecosystem.config.js配置instances:'max'、exec_mode:'cluster'、max_memory_restart:'1g')、apache负责反向代理与https终止;必须按pm2 start→pm2 save→pm2 startup顺序闭环配置开机自启,再通过健康检查增强可靠性。

用 PM2 配合 Apache 实现 Node.js 高可用服务,核心在于分工明确:PM2 专管 Node.js 进程的稳定性与多实例容错,Apache 负责反向代理、HTTPS 终止和请求分发。两者不互相替代,而是协同工作。
必须用配置文件启动 PM2,不能只跑命令行
直接执行 pm2 start app.js 只会起单个实例,无内存保护、无集群、不注册开机自启,服务器重启后进程就消失。生产环境必须使用 ecosystem.config.js 文件定义运行策略:
- instances: 'max' —— 让 PM2 按 CPU 核心数启动多个实例,单个崩溃不影响整体服务
- exec_mode: 'cluster' —— 启用 Node.js 原生 cluster 模式,所有实例共享同一端口,由 PM2 内部负载分发
- max_memory_restart: '1G' —— 设定硬性内存上限,防止缓慢泄漏拖垮整机;值需根据服务器总内存合理设定(如 4G 内存机器设为 1G~1.5G)
- autorestart: true 和 watch: false —— 生产环境必须开启自动重启,但禁用文件监听(避免热重载干扰)
Apache 反向代理要正确指向 PM2 管理的服务端口
PM2 启动的应用默认监听一个本地端口(如 3000 或 9000),Apache 不应直接代理到 Node.js 进程本身,而应代理到该端口,并确保:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- Apache 已启用
proxy、proxy_http、proxy_balancer模块 - 虚拟主机配置中使用
ProxyPass和ProxyPassReverse,例如:
ServerName api.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/ - Node.js 应用必须绑定
127.0.0.1(而非0.0.0.0),避免外部直连绕过 Apache
开机自启和崩溃恢复要三步闭环
仅配置好 ecosystem.config.js 不够,必须完成以下三步,缺一不可:
- 先运行
pm2 start ecosystem.config.js --env production,确认pm2 list中状态为online - 再运行
pm2 save,把当前进程列表持久化到磁盘 - 最后执行
pm2 startup输出的完整命令(如sudo env PATH=... pm2 startup systemd -u www),让系统级服务接管
验证方式:执行 sudo reboot,等待 1–2 分钟后运行 pm2 list,应看到全部实例已自动恢复上线。
加一层健康检查提升可靠性
PM2 5.4+ 支持主动健康检查,可作为故障发现的第二道防线:
- 在
ecosystem.config.js的 app 配置中加入:
health_check: {
enable: true,
interval: 30000,
timeout: 5000,
port: 3000,
path: '/health',
retries: 3
} - Node.js 应用需提供轻量
GET /health接口,检查数据库连接、缓存等关键依赖 - 连续三次失败后,PM2 会主动重启对应实例,比单纯靠进程崩溃检测更早干预










