You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Elastic Beanstalk部署Node.js时的502 Bad Gateway错误

排查Elastic Beanstalk部署Node.js应用出现502 Bad Gateway的问题

根据你提供的日志和配置,核心问题是Nginx无法连接到Node.js应用服务(日志显示connect() failed (111: Connection refused)),以下是具体排查和修复步骤:

1. 端口配置冲突(最可能的原因)

Elastic Beanstalk的Node.js环境会自动为应用分配一个随机端口,并通过PORT环境变量传递给应用,但你自定义的Nginx配置里硬编码了127.0.0.1:3000作为上游地址,这会导致Nginx代理的端口和应用实际监听的端口不匹配。

修复:

修改.platform/nginx/nginx.conf中的upstream配置,使用Elastic Beanstalk的环境变量指定端口:

upstream node {
    server 127.0.0.1:${PORT};
    keepalive 1024;
}

或者使用平台自动生成的端口文件:

upstream node {
    server 127.0.0.1:`cat /var/elasticbeanstalk/staging/port`;
    keepalive 1024;
}

2. 生产环境依赖缺失

你的package.json中将swagger-ui-express、swagger-jsdoc等生产环境需要的包放在了devDependencies中,而Elastic Beanstalk在部署时会默认安装dependencies下的依赖,忽略devDependencies,导致应用启动时找不到模块,进而启动失败。

修复:

将生产依赖移到dependencies中:

"dependencies": {
    // ... 现有依赖
    "swagger-ui-express": "^5.0.0",
    "swagger-jsdoc": "^6.2.8"
},
"devDependencies": {
    // ... 移除上述两个包
}

3. 检查应用启动脚本与打包输出

你的package.json中start脚本为node main.js,而webpack打包输出的文件是dist/main.js,CI/CD流程中已将package.json复制到dist目录,这部分逻辑是对的,但需要确认:

  • webpack配置是否正确将所有模块打包到main.js中(如果使用了webpack-node-externals,则需确保生产环境能安装所有外部依赖)
  • 本地模拟生产环境启动验证:
    npm run build
    cd dist
    npm install --production
    npm start
    
    访问http://localhost:3000/health确认应用是否正常响应。

4. 查看应用启动日志

登录Elastic Beanstalk控制台,或通过SSH连接到EC2实例,查看应用启动日志/var/log/nodejs/nodejs.log,确认是否有模块缺失、语法错误等启动失败原因。

5. 检查Procfile配置

如果项目中存在Procfile,确保其内容为:

web: npm start

Elastic Beanstalk会优先使用Procfile中的命令启动应用,若配置错误会导致服务无法启动。

内容的提问来源于stack exchange,提问作者joon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:48:12