apache的mod_proxy_hcheck支持按节点独立配置健康检查,需在balancermember行内设置hcinterval、hcfails、hcpasses等参数,配合proxyhcexpr自定义判断逻辑,并依赖apache≥2.4.33且模块已加载。

Apache 的 mod_proxy_hcheck 允许为每个后端节点单独设置健康检查频率和失败判定逻辑,不是全局统一的。关键在于把参数直接写在 BalancerMember 行内,而不是放在顶层或 ProxyPass 指令中。
每个节点可独立配置检查间隔(hcinterval)
用 hcinterval 控制该节点的探测周期,单位是秒,支持不同节点设不同值:
-
hcinterval=5:每 5 秒发一次请求,适合核心服务,响应快、需快速发现故障 -
hcinterval=30:每 30 秒一次,适合低频或资源敏感型后端,降低探测开销 - 不写该参数则使用模块默认值 30 秒;设为 0 表示禁用对该节点的主动检查
失败与恢复阈值按节点分别设定(hcfails / hcpasses)
节点是否被标记为 down 或重新上线,取决于它自己的连续失败/成功次数:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
hcfails=3:该节点连续 3 次健康检查失败(超时或表达式不匹配),才置为 DOWN -
hcpasses=2:DOWN 状态下,必须连续 2 次检查成功,才允许恢复为 UP - 这两个值可以混搭,比如对稳定性差的节点设
hcfails=2+hcpasses=3,加快下线但延缓恢复
注意实际生效的前提条件
这些参数只在满足以下条件时才起作用:
- Apache 版本 ≥ 2.4.33,且已加载
mod_proxy_hcheck.so(httpd -M | grep hcheck有输出) - 必须配合
ProxyPass使用,且目标是balancer://xxx或明确的BalancerMember - 不能仅靠 HTTP 状态码判断——若后端返回 200 但 body 是
{"alive":false},需配ProxyHCExpr提取真实状态,否则hcfails不会触发
一个典型配置示例
下面这段配置让两台后端拥有完全不同的健康策略:
<proxy> BalancerMember http://10.0.1.10:8080 hcinterval=5 hcfails=2 hcpasses=2 hcuri=/healthz BalancerMember http://10.0.1.11:8080 hcinterval=20 hcfails=5 hcpasses=3 hcuri=/actuator/health </proxy> ProxyPass "/api" "balancer://myapp/" ProxyPassReverse "/api" "balancer://myapp/"
第一台更激进(5 秒一查、连错 2 次就下线),第二台更保守(20 秒一查、要连过 3 次才恢复),适配不同 SLA 要求。










