AWS Elastic Beanstalk部署Spring Boot应用出现502 Bad Gateway错误如何解决
问题概述
多次遇到同类问题但现有解决方案均不生效,通过AWS Elastic Beanstalk部署Spring Boot应用时出现502 Bad Gateway nginx/1.20.0错误,日志报错信息为:
connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.16.189, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/"
已完成两项配置排查:
- 代码中指定应用使用5000端口:

- 环境属性中配置对应端口:

上述配置确认无误后问题仍未解决。
错误原因分析
该报错本质是nginx无法将请求转发到上游的Spring Boot应用,除已排查的端口配置外,核心可能性有三类:
- Spring Boot应用本身启动失败,没有实际监听5000端口
- Spring Boot绑定的地址限制了本地nginx的访问
- Elastic Beanstalk平台的默认代理配置与实际应用端口不匹配
解决方案
按优先级逐一排查:
- 确认应用实际运行状态
登录部署的EC2实例,依次执行以下命令:
- 查看Spring Boot进程是否存活:
ps -ef | grep java - 查看5000端口是否处于监听状态:
netstat -tunlp | grep 5000
如果没有对应进程或端口未监听,说明应用启动失败,查看应用日志/var/log/web.stdout.log排查启动报错(常见原因:数据库连接失败、配置文件缺失、依赖冲突等,修复启动问题后即可恢复)。
检查Spring Boot绑定地址配置
确认application配置文件中没有设置server.address=127.0.0.1,如果有该配置,直接删除或者修改为server.address=0.0.0.0,确保应用接受所有本地网卡的请求。手动覆盖nginx代理配置
如果你使用的是Amazon Linux 2版本的Elastic Beanstalk环境,可通过添加自定义配置强制nginx转发到5000端口:
在项目根目录创建.platform/nginx/conf.d/elasticbeanstalk/00_application.conf文件,写入以下内容:
location / { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
重新打包部署即可生效。
- 确认启动命令配置
如果你使用的是Java SE平台的Elastic Beanstalk环境,检查项目根目录的Procfile文件,确保启动命令中指定的端口为5000,示例配置:web: java -jar 你的应用包名.jar --server.port=5000
内容的提问来源于stack exchange,提问作者M. Winnicki
相关产品推荐
相关产品推荐

