AWS ALB健康检查失败但EC2主机可用问题求助
排查ALB目标组健康检查失败的方案
以下是针对问题的具体排查步骤:
查看Apache日志定位请求状态
登录EC2实例,检查Apache的访问日志(路径通常为/var/log/httpd/access_log),寻找ALB健康检查的请求记录。ALB健康检查的IP属于VPC的ALB前缀列表,你可以通过日志确认:- 健康检查请求是否成功到达EC2实例
- 请求的路径、Host头参数
- 实例返回的HTTP状态码(若状态码不在200-399范围内,就是直接原因)
同时检查错误日志(/var/log/httpd/error_log),排查是否有相关的服务报错。
修正健康检查的Host头配置
从你内部curl的结果可以看到,WordPress返回的Link头使用的是公网IP,说明站点配置的URL是公网IP。而ALB默认健康检查的Host头是实例的私有IP,若Apache或WordPress对Host头有校验,会导致健康检查请求异常。
你可以修改目标组的健康检查设置:在高级健康检查设置中手动指定Host头为你的EC2公网IP,或者实例私有IP172.31.21.213,然后观察健康状态是否更新。确认健康检查的响应匹配规则
如果你使用/health-check.txt作为健康检查路径,需确认目标组的健康检查配置:- 默认仅校验状态码在200-399之间,若你开启了匹配正文选项,必须填入正确的匹配文本(如
I am healthy.),否则会被判定为检查失败。
- 默认仅校验状态码在200-399之间,若你开启了匹配正文选项,必须填入正确的匹配文本(如
检查VPC网络ACL规则
虽然EC2安全组允许0.0.0.0/0的80端口入站,但VPC的网络ACL是无状态的,需要同时配置:- 入站规则:允许来自ALB IP段的80端口流量
- 出站规则:允许EC2返回响应的临时端口流量
确认网络ACL没有拦截健康检查的流量。
切换健康检查的请求类型
目标组默认使用HEAD请求,部分Web应用或配置可能对HEAD请求有特殊限制。你可以尝试将健康检查的请求类型改为GET,再测试健康状态是否恢复。
内容的提问来源于stack exchange,提问作者BogeyMan
相关产品推荐
相关产品推荐

