mod_proxy_hcheck不支持被动健康检查,仅支持主动探测;被动检查应使用mod_proxy内置的maxattempts与retry机制,二者组合可实现快速发现与兜底恢复。
apache 的 mod_proxy_hcheck **不支持被动健康检查**——它专为**主动探测**设计,即周期性发起真实 http/https/tcp 请求去探活后端节点。
为什么不能用 mod_proxy_hcheck 做被动检查
被动健康检查依赖的是“真实业务请求的响应结果”,而非独立探针。而 mod_proxy_hcheck 的工作方式是:
- 在后台定时(
hcinterval)向每个BalancerMember发起独立探测请求; - 根据响应状态码、响应体或自定义表达式(
hcexpr)判断节点健康状态; - 该机制与用户流量无关,属于主动行为。
所以它天然不属于被动模式。Apache 官方模块中,真正对应“被动检查”的是 mod_proxy 自带的失败计数机制(如 maxattempts + retry),但该能力不依赖 hcheck,也不需要启用 mod_proxy_hcheck。
Apache 中实现被动健康检查的正确方式
利用 mod_proxy 内置的代理失败反馈逻辑,在请求流中自动统计异常并临时剔除节点:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 配置
ProxySet maxattempts=1 retry=30:当某后端连续 1 次返回 5xx 或连接失败,Apache 将在 30 秒内不再向其转发新请求; - 该策略无需额外模块,只要启用了
mod_proxy和mod_proxy_balancer即可生效; - 它完全基于真实请求的失败结果,符合被动检查定义。
主动 + 被动组合才是可靠方案
仅靠被动机制有明显缺陷:节点已宕机但尚未收到第一个请求时,Apache 仍会把首笔流量发过去,导致用户遭遇失败。
推荐搭配使用:
- 用
mod_proxy_hcheck主动探测(如每 5 秒 GET /healthz),提前发现故障; - 同时保留
maxattempts=1 retry=30,应对探测间隙或瞬时异常; - 二者叠加,既能快速感知,又能兜底恢复。

















