node.js 崩溃需由 pm2 实现秒级自启,nginx 仅负责反向代理与健康兜底;pm2 支持自动重启、热更新、开机自启,而 systemd 缺乏应用层错误感知与集群管理能力。

用 Nginx 反向代理 Node.js 时,Nginx 本身不负责 Node.js 进程的存活,它只转发请求。Node.js 应用一旦崩溃,连接就断了,用户看到 502 错误——所以自动崩溃重启的关键在 Node.js 层,不是 Nginx 层。
用 PM2 管理 Node.js 进程
PM2 是目前最成熟、开箱即用的 Node.js 守护方案,能真正实现“崩溃秒级自启”:
- 安装后直接启动: pm2 start app.js --name my-api
- 默认开启异常自动重启:进程因未捕获错误、内存溢出或被 kill 掉,PM2 会在 1–2 秒内拉起新实例
- 启用文件监听可支持热更新:pm2 start app.js --watch(开发调试用)
- 开机自启只需一步:pm2 startup → 按提示执行生成的命令,再 pm2 save
Nginx 配合做健康兜底
Nginx 不管 Node.js 是否真能处理请求,只看端口是否通。为防“进程活着但卡死”,建议加一层 HTTP 健康检查:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 在 Node.js 应用中暴露 /healthz 路由,返回 200 OK
- Nginx 配置里添加 upstream 的健康探测(需 nginx-plus 或开源版配合第三方模块),或更轻量的做法:写个检测脚本
- 例如定时执行:curl -f http://127.0.0.1:3000/healthz || pm2 restart my-api
避免配置错误导致反复崩溃
PM2 启动失败常因代码语法错误、端口被占、环境变量缺失等。可在启动前加校验逻辑:
- 用 pm2 start ecosystem.config.js 定义完整启动流程
- 在 script 中先运行 node app.js --check 或 npm run validate,失败则不启动
- 日志集中查看:pm2 logs my-api,比翻系统日志更直观
不推荐用 systemd 直接托管 Node.js
虽然可以写 .service 文件让 systemd 管 Node.js,但相比 PM2 缺少以下能力:
- 无法感知应用内部错误(如 Promise.reject 未 catch)
- 不支持多进程负载均衡(-i max)
- 无内置日志轮转、内存监控、CPU 占用告警
- 重载配置、集群管理、部署钩子等功能都要自己补全










