Nginx反向代理+PM2守护是Node.js生产部署的成熟方案:Nginx处理HTTPS、静态资源与转发,PM2保障进程常驻、自动重启与监控;需正确配置端口绑定、WebSocket头、SSL证书及健康检查。

用 Nginx 反向代理 Node.js,再配合 PM2 这类进程守护工具,是保障服务长期稳定运行的成熟组合。Nginx 负责对外统一入口、HTTPS 终止、静态资源处理和请求转发;PM2 则专注内部 Node.js 进程的存活、重启、监控与自动恢复。两者分工明确,缺一不可。
Node.js 必须由 PM2(或类似工具)托管
Node.js 进程默认不具备后台常驻、崩溃自启、内存超限保护等能力。直接用 node app.js 启动,在生产环境极易因异常退出而中断服务。
- 用
pm2 start app.js --name myapp启动,赋予可识别名称便于管理 - 添加关键参数提升健壮性:
--watch监听文件变化自动重启,--max-memory-restart 256M防止内存泄漏导致卡死 - 执行
pm2 startup并按提示完成配置,确保服务器重启后应用自动拉起 - 运行
pm2 save持久化当前进程列表,避免配置丢失
Nginx 配置要正确指向 PM2 管理的端口
Nginx 不关心 Node.js 怎么启动,只依赖它监听的具体地址和端口。必须确保 PM2 启动的应用绑定在本地回环地址(如 127.0.0.1:3000),且该端口未被其他进程占用。
- 在 Nginx 的站点配置(如
/etc/nginx/conf.d/myapp.conf)中,proxy_pass必须严格匹配 Node.js 实际监听地址,例如:proxy_pass http://127.0.0.1:3000; - 务必设置 WebSocket 支持头(尤其对公众号/实时交互场景):
proxy_set_header Upgrade $http_upgrade;和proxy_set_header Connection 'upgrade'; - 添加
X-Forwarded-*系列头,让 Node.js 应用能正确获取用户真实 IP 和协议类型
微信公众号等特殊场景需额外注意 HTTPS 和域名一致性
微信平台强制要求服务器地址为 HTTPS 域名,且 Token 验证、消息回调均依赖完整可用的公网访问链路。
- Nginx 必须配置有效的 SSL 证书(推荐 Let's Encrypt 自动续签),并监听 443 端口
- HTTP 请求应全部 301 重定向到 HTTPS,避免微信客户端因协议不一致失败
- 确保 PM2 启动的应用不监听 0.0.0.0(暴露公网端口),仅绑定
127.0.0.1,安全边界由 Nginx 定义 - 公众号后台填写的服务器 URL(如
https://api.example.com)必须与 Nginx 的server_name完全一致
日常运维与故障快速响应
稳定不是一次配置的结果,而是靠可观测性和响应机制支撑。
- 用
pm2 monit实时查看 CPU、内存占用;用pm2 logs myapp快速定位启动报错或运行时异常 - 定期检查 Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log,常见问题如 upstream refused(Node.js 未运行)、connection timed out(端口不通) - 模拟服务中断:手动
pm2 stop myapp,观察 Nginx 是否返回 502;再pm2 start,确认是否自动恢复 - 设置简单健康检查路由(如
GET /health返回 200),配合 curl 或监控系统做连通性验证


















