nginx负责反向代理和静态资源服务,pm2负责node.js进程守护、自动重启与日志收集;二者分工协作:pm2确保应用后台稳定运行,nginx将请求合理分发。

Nginx 本身不管理 Node.js 进程,它只负责反向代理和静态资源服务;真正承担进程守护、自动重启、日志收集等职责的是 PM2。线上部署时,Nginx 和 PM2 是分工协作的关系:PM2 确保你的 Node.js 应用稳稳运行在后台,Nginx 则把用户请求合理分发给它。
用 PM2 启动并守护 Node.js 应用
确保已全局安装 PM2:
npm install -g pm2
进入项目根目录(含 app.js 或 server.js),执行:
- 启动应用(带名称便于识别):
pm2 start app.js --name "my-api"
- 启动时指定环境变量(如生产模式):
pm2 start app.js --name "my-api" --env production
- 启动集群模式(充分利用多核 CPU):
pm2 start app.js -i max --name "my-api-cluster"
启动后运行 pm2 list 可看到进程状态,online 表示运行正常。
让 PM2 在系统重启后自动恢复
线上服务必须具备自愈能力。执行两步即可实现开机自启:
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
pm2 startup pm2 save
pm2 startup 会生成对应系统的启动脚本(如 systemd),pm2 save 将当前所有运行中的进程列表持久化。之后服务器重启,PM2 会自动拉起你保存过的应用。
配合 Nginx 做反向代理
Nginx 不需要知道 PM2 的存在,只需知道 Node.js 应用监听的地址和端口。例如,若 PM2 启动的应用绑定在 127.0.0.1:3000,Nginx 配置应类似:
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
注意:确保 Node.js 应用代码中监听的是 127.0.0.1(而非 0.0.0.0)更安全,且端口不被外部直接访问。
日常运维与问题排查
- 查看实时日志:
pm2 logs my-api - 查看资源占用:
pm2 monit - 重启服务:
pm2 restart my-api - 查看详细信息:
pm2 show my-api - 若端口被占或进程卡死,可用
lsof -i :3000找出 PID,再kill -9 <pid></pid>清理
PM2 和 Nginx 各司其职——一个管“活”,一个管“路”。只要 Node.js 应用能稳定响应 curl http://127.0.0.1:3000/health,Nginx 就能可靠地把它暴露给外界。










