CloudFormation中EC2静态页无法通过负载均衡器访问问题排查
排查CloudFormation部署的ELB无法访问后端EC2静态页面的问题
我来帮你一步步拆解这个问题:既然EC2实例能直接访问,但通过负载均衡器就不行,结合你提供的CloudFormation模板,咱们重点从安全组配置和ELB健康检查这两个核心方向入手:
1. 安全组的必填项缺失(最可能的问题)
你的模板里的两个安全组SGELB和SGApp都漏掉了必填的GroupDescription属性!AWS要求创建安全组时必须填写这个描述字段,否则CloudFormation部署时要么报错,要么创建出的安全组状态异常,直接影响流量转发。
你需要给两个安全组都补上这个字段,比如:
SGELB: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPC GroupDescription: "允许公网HTTP流量访问ELB" # 新增这行
SGApp: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPC GroupDescription: "允许ELB访问EC2的HTTP服务" # 新增这行
另外,虽然默认安全组会允许所有出站流量,但为了稳妥,你可以给SGELB显式添加出站规则,确保它能访问EC2的80端口:
AllowOutboundHTTPToEC2: Type: 'AWS::EC2::SecurityGroupEgress' Properties: GroupId: !Ref SGELB IpProtocol: tcp FromPort: '80' ToPort: '80' DestinationSecurityGroupId: !Ref SGApp
2. 检查ELB的健康检查状态
如果安全组配置没问题,那下一步要看ELB的健康检查是否通过:
- 登录AWS控制台找到你的ELB,切换到「实例」标签页,查看实例的健康状态。如果显示
Unhealthy,说明ELB连不上EC2的80端口,自然不会转发流量。 - 你的模板里健康检查目标是
HTTP:80/,你可以用curl -I http://<EC2公网IP>确认根路径是否返回200状态码(你说能直接访问页面,这步应该没问题,但还是验证下更稳妥)。
3. 其他验证点(快速排除)
- 路由表:你的公网子网已经关联了指向IGW的路由表,EC2和ELB都能访问公网,这部分配置是对的,不用纠结。
- EC2安全组关联:模板里已经把
SGApp绑定到EC2实例的网卡上了,这部分没问题。
修复后的关键配置片段
把上面的修改整合后,安全组部分的配置应该是这样:
SGELB: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPC GroupDescription: "允许公网HTTP流量访问ELB" AllowInboundHTTPToELB: Type: 'AWS::EC2::SecurityGroupIngress' Properties: GroupId: !Ref SGELB IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 AllowOutboundHTTPToEC2: Type: 'AWS::EC2::SecurityGroupEgress' Properties: GroupId: !Ref SGELB IpProtocol: tcp FromPort: '80' ToPort: '80' DestinationSecurityGroupId: !Ref SGApp SGApp: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPC GroupDescription: "允许ELB访问EC2的HTTP服务" AllowInboundHTTPFromELB: Type: 'AWS::EC2::SecurityGroupIngress' Properties: GroupId: !Ref SGApp IpProtocol: tcp FromPort: '80' ToPort: '80' SourceSecurityGroupId: !Ref SGELB
重新部署CloudFormation模板后,应该就能通过ELB正常访问你的静态页面了。
内容的提问来源于stack exchange,提问作者Laurent Vaylet
相关产品推荐
相关产品推荐

