hcheck报错需查error_log中AH01102(后端未发状态行)、AH01095/AH01097(连接中断)、AH00957(无法连接)、hcexpr=xxx failed(响应内容不匹配)等关键词,结合直连验证与balancer-manager状态定位故障环节。
看懂 hcheck 报错关键词,定位失败环节
mod_proxy_hcheck 的异常不会直接写成“健康检查失败”,而是藏在 error_log 里,需重点搜索以下几类线索:
-
AH01102: error reading status line from remote server → 后端已建立连接,但没发 HTTP 状态行(如
HTTP/1.1 200 OK),常见于后端卡死、未响应或接口未启动 - AH01095: read failure 或 AH01097: client denied by server configuration → 连接中途断开,可能是后端提前 close、WAF 截断、或响应体过大被中间设备丢弃
- AH00957: HTTP: attempt to connect to [ip:port] failed → 根本连不上,不是健康检查逻辑问题,而是网络不通、端口未监听、防火墙拦截
- hcexpr=xxx failed(日志中带该字样)→ 响应内容匹配失败,说明后端返回了状态码 200,但 body 不符合预期(如 JSON 字段缺失、格式错乱、含 HTML 错误页)
验证 hcheck 配置是否生效且合理
先确认配置本身没写错,再判断参数是否过激:
- 检查
hcuri是否指向真实可用的健康接口(如/actuator/health),不能是 Apache 自身路径或重写后的 URL -
hcmethod必须为GET(HEAD不带响应体,无法用于hcexpr匹配) - 避免
hcinterval=2s+hcfail=1这类敏感组合:一次短暂超时就踢出节点,容易引发抖动放大。建议设为hcinterval=10s、hcfail=3、hcpass=2、retry=60s - 用
LogLevel proxy:debug临时开启详细日志,观察每次检测的请求头、响应状态、body 截取片段,确认匹配逻辑是否按预期执行
绕过代理直连后端,确认原始响应是否合规
这是最关键的一步——排除 Apache 干扰,验证后端本身是否真的“健康”:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 在 Apache 所在服务器执行:
curl -v http://10.0.1.20:8080/actuator/health 2>&1 | head -n 40 - 检查输出是否含完整 HTTP 状态行、空行分隔符(
\r\n\r\n)、合法 JSON(如{"status":"UP"}),特别注意有无乱码、二进制内容、HTML 错误页混入 - 若返回 500 页面或空响应,说明后端健康接口本身异常;若返回非标准格式(如缺
Content-Type: application/json),hcexpr可能因解析失败而误判
结合 mod_status 和 balancer-manager 实时观察节点状态
启用 mod_status 和 mod_proxy_balancer 后,访问 /server-status 和 /balancer-manager 可直观看到:
- 各
BalancerMember的当前状态(OK/ERR/DIS)、失败次数、最后检测时间 - Scoreboard 中是否有大量进程卡在
K(Keep-Alive)或S(Sleeping),间接反映健康检查线程阻塞 - 对比
balancer-manager显示的“Failed Pings”计数与 error_log 时间戳,确认是否周期性失败,还是偶发网络抖动

















