You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ALB目标组使用HTTP/2时健康检查失败问题排查请求

排查ALB HTTP/2目标组健康检查失败的步骤

针对你遇到的问题,以下是具体的排查方向,按优先级排序:

1. 确认目标组与健康检查的协议配置匹配

  • 检查目标组的协议版本是否明确设置为HTTP/2,同时健康检查的协议也要选择HTTP/2(ALB默认会匹配,但需手动确认,避免配置遗漏)
  • 如果目标组是明文HTTP(非HTTPS),后端容器必须支持h2c(明文HTTP/2)协议——ALB的HTTP/2目标组不会自动做协议转换,若后端只支持HTTP/1.1,健康检查必然失败
  • 验证健康检查端口与容器实际监听端口一致:比如容器在8080端口监听h2c,目标组健康检查端口不能设为443(除非容器配置了TLS证书并监听443)

2. 验证容器的HTTP/2服务可用性

直接在容器所在的EC2/ECS实例上,用curl测试HTTP/2请求,确认服务本身能正常响应:

  • 明文h2c测试:curl -v --http2 http://localhost:[容器端口]/[健康检查路径]
  • TLS加密HTTP/2测试:curl -v --http2 https://localhost:[容器端口]/[健康检查路径]
    如果测试失败,说明容器的Web服务器未正确启用HTTP/2:
    • Nginx:需在监听端口配置中添加http2 on;(TLS场景)或listen [端口] http2;(h2c场景),同时确保OpenSSL版本支持ALPN(1.0.2及以上)
    • Spring Boot:需在配置文件中开启server.http2.enabled=true,明文场景额外添加server.http2.h2c-enabled=true
    • 其他Web服务器:参照官方文档确认HTTP/2启用配置

3. 检查网络与安全配置

  • 安全组:确认ALB的安全组允许访问容器监听端口,目标实例的安全组允许ALB安全组的入站流量
  • NACL:如果使用VPC网络ACL,需确保入站/出站规则允许ALB与目标实例之间的端口通信(包括健康检查端口)
  • ALB类型:若ALB是HTTPS型,需确认目标容器的TLS配置有效(证书未过期、域名匹配),否则ALB无法建立HTTP/2连接

4. 核对健康检查的路径与响应规则

  • 确认健康检查路径正确:比如容器的健康端点是/healthz,目标组不能设为/(若/返回非2xx状态码)
  • 检查预期响应码范围:如果健康端点固定返回200,不要用默认的200-399范围,避免因其他非预期码触发检查失败
  • 调整健康检查超时/间隔:若容器启动或响应较慢,可适当调大超时时间(比如从5秒改为10秒)、延长间隔,避免误判

5. 日志排查

  • 开启ALB访问日志,查看健康检查请求的详细记录:日志会包含请求方法、路径、响应码、错误类型(如connection_timeout、protocol_error)
  • 查看容器的Web服务器日志或实例系统日志,确认是否收到ALB的健康检查请求,以及是否有协议不兼容、连接被拒绝等错误信息

补充:关于HTTP/2转HTTP/1.1时的net::ERR_HTTP2_PROTOCOL_ERROR

这个错误并非ALB与目标组的兼容性问题,而是后端返回的响应不符合HTTP规范,导致ALB在将HTTP/1.1响应转换为HTTP/2响应时触发协议错误。常见原因包括:

  • 响应头存在非法字符或格式错误(比如换行符不规范)
  • 响应内容长度与Content-Length头不匹配
  • 后端返回了无效的HTTP状态码

禁用HTTP/2后,浏览器对HTTP/1.1的兼容性更宽松,所以能正常显示原始错误。

内容的提问来源于stack exchange,提问作者Farooqi Afridi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:22:13