ALB目标组中使用HTTP/2时健康检查失败问题求助
分析ALB HTTP/2目标组健康检查失败的可能原因
容器服务未启用HTTP/2支持:
多数应用服务默认仅开启HTTP/1.1监听,即便ALB端配置了HTTP/2,若容器本身未启用HTTP/2协议支持(比如Nginx未给监听端口添加http2指令、Node.js未开启HTTP/2选项、Tomcat未配置HTTP/2连接器),会无法处理ALB发来的HTTP/2请求,直接返回错误或超时,触发健康检查失败。健康检查端口/路径不匹配:
若容器将HTTP/1.1和HTTP/2分别绑定在不同端口(比如80端口跑HTTP/1.1,443端口跑加密HTTP/2),而目标组健康检查仍沿用HTTP/1.1的端口配置,就会因端口不匹配导致失败。另外需确认健康检查路径(比如/health)在HTTP/2服务的路由配置中是否存在,避免因路径不存在返回404。TLS/明文HTTP/2不兼容:
AWS ALB目标组的HTTP/2协议分两种场景:- 若目标组配置为明文HTTP/2(h2c),但容器仅支持加密的HTTP/2(h2,基于TLS),会因协议不兼容导致握手失败;
- 若目标组配置为HTTPS+HTTP/2,但容器的TLS证书存在问题(过期、域名不匹配、证书链未正确配置),会导致TLS握手失败,健康检查无法通过。
网络/安全组限制:
检查安全组是否允许ALB访问容器的HTTP/2监听端口(比如443端口),即便HTTP/1.1的端口已开放,HTTP/2端口若未在安全组/网络ACL中授权,ALB的健康检查请求会被拦截。容器日志排查:
直接查看容器的访问日志或错误日志,确认是否收到ALB的健康检查请求。比如Nginx日志中若出现client sent an HTTP/2 request to an HTTP/1.1 only server,可直接定位为容器未启用HTTP/2;若有TLS握手错误日志,则指向证书或加密配置问题。
内容的提问来源于stack exchange,提问作者Farooqi Afridi
相关产品推荐
相关产品推荐

