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 在系统重启后自动恢复
线上服务必须具备自愈能力。执行两步即可实现开机自启:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
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>清理
PM2 和 Nginx 各司其职——一个管“活”,一个管“路”。只要 Node.js 应用能稳定响应 curl http://127.0.0.1:3000/health,Nginx 就能可靠地把它暴露给外界。

















