AWS ALB返回502 Bad Gateway故障排查求助
排查ALB到ECS Fargate的502 Bad Gateway问题
根据你的描述,直接访问ALB DNS也返回502,说明问题核心在ALB与ECS Fargate服务的连通性或配置匹配上,以下是按优先级排序的排查步骤:
1. 检查目标组健康状态与注册情况
- 登录AWS控制台,进入EC2 -> 目标组,查看对应目标组的目标状态:
- 如果目标显示「未注册」:确认ECS服务的负载均衡配置是否正确关联了该目标组,任务定义的网络模式是否为
awsvpc(Fargate强制要求),且ECS服务的子网与目标组的VPC一致。 - 如果目标显示「不健康」:检查健康检查配置是否匹配你的Java应用:
- 健康检查路径是否为应用的存活端点(比如Spring Boot的
/actuator/health),确保该端点返回200-399状态码。 - 健康检查的协议、端口是否与容器暴露的端口一致(你这里是HTTP:80)。
- 调整健康检查的超时、间隔时间,避免因应用启动慢导致的误判。
- 健康检查路径是否为应用的存活端点(比如Spring Boot的
- 如果目标显示「未注册」:确认ECS服务的负载均衡配置是否正确关联了该目标组,任务定义的网络模式是否为
2. 验证ECS任务的运行状态与日志
- 进入ECS控制台,查看对应任务的状态:如果任务是「运行中」但健康检查失败,查看容器日志(CloudWatch Logs):
- 确认Java应用是否成功启动,日志中是否有端口绑定成功的信息(比如
Tomcat started on port(s): 80 (http))。 - 检查是否有数据库连接失败、环境变量配置错误等导致应用无法正常提供服务的报错。
- 确认Java应用是否成功启动,日志中是否有端口绑定成功的信息(比如
- 确认任务定义的端口映射:容器端口设置为80,主机端口留空(Fargate无需主机端口),协议为TCP。
3. 排查网络连通性问题
- 私网子网路由表:ECS部署在私网子网,需确保子网的路由表包含
0.0.0.0/0指向NAT网关的路由(私网子网的任务无法通过公网IP直接访问公网,必须依赖NAT网关拉取镜像、访问外部服务)。如果缺少这条路由,任务可能因无法初始化导致服务不可用。 - 网络ACL配置:VPC的网络ACL是子网级防火墙,需确认:
- 入站规则允许ALB所在公网子网的IP段访问ECS私网子网的80端口(TCP)。
- 出站规则允许ECS私网子网的流量返回ALB的IP段。
- 连通性测试:在同一VPC的公网子网启动一台EC2实例,使用
telnet <ECS任务私网IP> 80或curl <ECS任务私网IP>测试是否能访问应用。如果不通,进一步排查安全组(虽然你说允许所有流量,但需确认安全组的入站规则是否允许来自ALB安全组的80端口流量)。
4. 核对ALB配置细节
- 确认ALB的监听器规则:HTTPS:443监听器的默认动作是否转发到正确的目标组,没有错误的路径匹配规则导致流量无法到达ECS。
- 检查ALB的安全组:入站规则允许公网的443端口流量,出站规则允许访问ECS私网子网的80端口流量。
先解决ALB到ECS的基础访问问题,再逐步验证API Gateway到ALB的链路。
内容的提问来源于stack exchange,提问作者Tushar Jain
相关产品推荐
相关产品推荐

