华为云 ELB 健康检查一直异常?排查思路与三个常见原因
给 ECS 挂上 ELB 之后,健康检查长时间显示「异常」,但直接 curl 后端服务又是通的。这种情况十有八九不是网络问题,而是健康检查的配置和服务的真实行为对不上。下面是排查思路和三个最常见的坑。
一、先看协议:TCP 检查通、HTTP 检查不通
ELB 的健康检查协议可以选 TCP 或 HTTP。如果选了 HTTP 检查但一直异常,先用 curl 模拟健康检查的完整请求:
curl -v http://后端IP:端口/健康检查路径
重点看返回码。健康检查默认只认 2xx 返回码,如果你的接口对根路径返回 301(重定向到登录页)或 404(没配路由),检查就永远过不了。解决办法二选一:把检查路径改成一个确定返回 200 的接口(比如 /healthz),或在健康检查高级配置里把 301/404 加进正常返回码范围。
二、检查路径配置错误
第二个坑是路径。很多框架默认路径下返回的不是应用状态,而是前端静态页或者 404。检查路径必须是从端口根开始的绝对路径,不需要拼域名。Nginx 场景建议专门配一个轻量的健康检查 location:
location /healthz {
access_log off;
return 200 "ok";
}
这样不产生业务日志,也不会被业务逻辑拖慢,检查响应快且稳定。
三、安全组和防火墙放行了业务端口却漏了检查来源
第三个坑在安全组。ELB 健康检查报文的源 IP 不是客户端 IP,而是 ELB 的检查源 IP(100.125.0.0/16 网段)。如果后端安全组只放行了业务网段,健康检查报文会被直接丢弃,表现就是 TCP 检查也异常。确认安全组入方向规则里放行了 100.125.0.0/16 到检查端口。
排查顺序小结
- 先在后端机本机 curl 检查路径,确认返回码是 2xx;
- 再看 ELB 健康检查配置的协议、端口、路径是否和真实服务一致;
- 最后核对安全组是否放行了 100.125.0.0/16。
按这三步走,绝大多数「后端正常但检查异常」的问题都能在十分钟内定位。改完配置后健康检查有几十秒的探测周期,不要改完立刻下结论。
- 点赞
- 收藏
- 关注作者
评论(0)