AWS ALB访问后端EC2返回502错误(CloudFormation部署)原因排查
ALB返回502错误的根因分析
核心问题1:EC2实例无公网IP导致软件安装失败
你的EC2实例部署在公有子网,但CloudFormation模板中EC2资源未配置AssociatePublicIpAddress: true:
- 如果你的公有子网未开启「自动分配公有IPv4地址」的默认设置,EC2实例创建后不会分配公网IP
- UserData脚本中需要执行
sudo yum update和sudo yum install -y httpd,这两个操作需要访问公网的yum源,无公网IP的情况下请求会超时失败,导致httpd根本没有安装、更无法启动 - 目标组健康检查访问EC2的80端口无响应,所有后端被标记为不健康,ALB无可用后端就会返回502错误
其他可能的问题
- 本地防火墙未放行端口:如果你使用的AMI默认开启了firewalld/iptables服务,即使安全组放行了80端口,EC2本地防火墙也会拦截ALB的访问请求
- httpd未配置开机自启:UserData中仅执行了
service httpd start,未配置开机自启,如果EC2实例发生重启,httpd不会自动启动,导致端口无响应 - 健康检查尚未达标:你的目标组配置的健康检查阈值为3次成功,间隔30秒,首次部署完成后需要等待至少90秒才会将EC2标记为健康,刚部署完立即访问会出现502
修复方案
- 在EC2资源的Properties中添加
AssociatePublicIpAddress: true,确保实例分配公网IP可以访问公网yum源 - 在UserData中新增防火墙放行规则和httpd开机自启配置,示例:
#!/bin/bash -xe cd /tmp sudo yum update -y sudo yum install -y httpd # 放行本地防火墙80端口(适用于带firewalld的系统) sudo firewall-cmd --add-port=80/tcp --permanent sudo firewall-cmd --reload echo "Welcome from the instance 1" > /var/www/html/index.html sudo systemctl enable --now httpd
- 部署完成后等待2-3分钟再测试ALB访问,确保健康检查已通过
内容的提问来源于stack exchange,提问作者DrkStr
相关产品推荐
相关产品推荐

