使用Terraform部署AWS应用后出现502 Bad Gateway错误排查求助
排查AWS ALB 502 Bad Gateway错误的实操方案
先查ALB目标组的健康状态
- 进入AWS控制台的EC2 -> 目标组,先查看实例的健康状态:
- 如果实例标红不健康,直接聚焦到实例或健康检查配置问题
- 核对健康检查路径:前端目标组要配置
/(对应前端根路径),后端需使用能返回200状态码的接口(比如/api/health),避免配置不存在的路径 - 确认健康检查的端口、协议和EC2上应用的监听端口一致(比如前端用80,后端用3000)
- 查看AWS给出的健康检查失败原因,比如连接超时、404,这是最直接的排查线索
验证EC2上的应用能否正常运行
- 直接通过EC2的公网IP访问应用:
- 访问
http://<EC2公网IP>:<前端端口>,确认前端页面能正常加载 - 测试后端接口
http://<EC2公网IP>:<后端端口>/api/xxx,确认接口有正常返回
- 访问
- 登录EC2实例,执行
docker ps查看容器是否在运行:- 若容器未启动,查看容器日志
docker logs <容器ID/名称>,排查启动报错(比如依赖缺失、端口被占用) - 检查User Data脚本的执行日志
cat /var/log/cloud-init-output.log,确认Docker安装、Git克隆、容器启动的每一步都执行成功(比如Git克隆是否有权限、镜像是否拉取完成)
- 若容器未启动,查看容器日志
核对安全组和网络配置
- ALB安全组:必须放开80/443端口的公网入站规则,同时允许出站到EC2的应用端口(比如80、3000)
- EC2安全组:不能只放行公网IP,必须允许ALB所在安全组访问应用端口;还要放开到RDS数据库端口(比如3306、5432)的出站规则,以及互联网出站规则(用于拉取Docker镜像、克隆Git代码)
- VPC路由表:确认EC2所在子网有到互联网的路由(若需公网访问),ALB所在子网为挂载了Internet Gateway的公网子网,RDS与EC2所在子网可连通(同VPC或配置了VPC Peering)
检查RDS的连接是否正常
- 登录EC2实例,用数据库客户端测试连接:MySQL执行
mysql -h <RDS端点> -u <用户名> -p,PostgreSQL执行psql -h <RDS端点> -U <用户名> -d <数据库名> - 核对后端应用的数据库配置:确认User Data中注入的RDS端点、用户名、密码、数据库名称均正确
- RDS安全组:必须允许EC2所在安全组访问数据库端口
确认ALB的路由规则配置正确
- 查看ALB的监听器规则:
/路径是否转发到前端目标组/api/*是否转发到后端目标组,且路径匹配规则为前缀匹配(不要选精确匹配)- 监听器的协议(HTTP/HTTPS)与目标组的协议需一致(比如ALB用HTTP,目标组也需配置HTTP)
其他排查点
- 检查Docker端口映射:确认容器端口已正确映射到主机端口(比如前端容器80端口映射到主机80端口)
- 确认应用监听地址:容器内的应用需监听
0.0.0.0,若仅监听localhost,ALB将无法访问 - 开启ALB访问日志:在ALB配置中开启访问日志并存储到S3,下载日志后查看具体请求的返回码、目标实例及错误细节
内容的提问来源于stack exchange,提问作者gingerCat
相关产品推荐
相关产品推荐

