Angular升级后SSR部署遇502错误,无日志如何排查?
问题原因分析
- Node.js版本兼容性:Angular最新版本生成的
.mjs文件可能需要更高版本的Node.js支持,虽然本地直接运行无报错,但PM2使用的Node环境可能和终端环境不一致。 - PM2配置细节错误:比如
ecosystem.config中入口文件的相对/绝对路径写错,或者端口配置与Nginx转发端口不匹配——即便实例显示在线,也可能未监听正确端口。 - 服务监听地址不匹配:Angular SSR服务可能修改了监听地址(比如从
127.0.0.1改为0.0.0.0,或反之),导致Nginx无法建立连接。 - 文件权限问题:PM2运行用户无
main.server.mjs所在目录的读取权限,实例虽显示在线,但服务实际无法正常处理请求。
调试步骤
- 验证PM2实例真实状态
- 执行
pm2 show <你的实例名>,核对status、port、script path等信息,确认端口和路径正确;同时查看restart count,若频繁重启说明服务启动后崩溃。 - 查看PM2日志细节:
pm2 logs <实例名> --lines 100,即便无明显错误,也可能存在启动时的警告信息。
- 执行
- 检查Node环境一致性
- 终端执行
node -v,再执行pm2 env <实例名>查看PM2使用的Node版本,确保两者一致——Angular最新版本通常要求Node.js 18+。
- 终端执行
- 验证服务监听地址与端口
- 直接运行
node main.server.mjs后,用netstat -tulpn | grep <端口号>或ss -tulpn | grep <端口号>检查服务监听的地址,确认与Nginx配置中的转发地址匹配(比如都是127.0.0.1)。
- 直接运行
- 本地测试服务可用性
- 在服务器上执行
curl http://127.0.0.1:<端口号>或wget http://127.0.0.1:<端口号>,若能正常返回内容,问题出在Nginx;若返回失败,说明服务存在隐性启动问题。
- 在服务器上执行
- 排查文件权限
- 查看文件权限:
ls -l <main.server.mjs路径>,确保PM2运行用户(如www-data或登录用户)有读权限。可临时执行chmod +r main.server.mjs测试,或切换到PM2用户运行node main.server.mjs验证。
- 查看文件权限:
- 排查Nginx隐性问题
- 重新加载Nginx配置:
nginx -s reload,确保配置生效。 - 查看Nginx访问日志(默认路径
/var/log/nginx/access.log),确认请求是否到达Nginx,以及转发端口是否正确。 - 临时修改Nginx配置,添加
proxy_connect_timeout 10s;和proxy_send_timeout 10s;,延长超时时间排查是否因连接超时导致502。
- 重新加载Nginx配置:
内容的提问来源于stack exchange,提问作者Coach83
相关产品推荐
相关产品推荐

