Apache负载均衡需显式配置mod_proxy_hcheck主动探测并自定义健康判断逻辑,不能仅依赖状态码;须确认模块加载、版本≥2.4.49以支持响应体解析,并为每个BalancerMember设置hcexpr等参数实现闭环检查。
apache 负载均衡能自动摘除故障节点,但必须靠 mod_proxy_hcheck 显式配置主动探测 + 正确判断逻辑,不能仅依赖连接通断或状态码默认行为。关键不是“开了模块就自动生效”,而是让每个后端成员真正参与可验证的健康检查闭环。
确认模块已加载并支持所需功能
运行 httpd -M | grep proxy_hcheck,有输出才说明模块已加载。该模块从 2.4.33 引入,但完整支持响应体解析(如 %{hc resp body})需 2.4.49+。若版本偏低,只能用响应头做判断。
- 没加载就手动添加:
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so - 路径要对:RHEL/CentOS 通常是
/usr/lib64/httpd/modules/,Ubuntu/Debian 是/usr/lib/apache2/modules/ - 模块必须配合
balancer://使用,单独配ProxyPass http://不会触发探测
定义健康判断逻辑(核心步骤)
默认只看 HTTP 状态码是否为 2xx/3xx,极易误判。例如后端返回 200 但 JSON 内容是 {"status":"DOWN"},Apache 仍认为健康。必须用 ProxyHCExpr 自定义表达式:
- 检查响应体内容(推荐):
ProxyHCExpr ok200 %{hc resp body} =~ /"status"\s*:\s*"UP"/ - 旧版本只能用响应头:
ProxyHCExpr ok %{hc resp header X-Health} == "true" - 表达式名(如
ok200)需在BalancerMember行中显式引用,否则不生效
为每个节点配置探测参数
健康检查不是全局开关,而是逐节点设定。以下是最小可用配置示例:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<Proxy balancer://myapp>
BalancerMember http://node1:8080 \
hcexpr=ok200 \
hcmethod=GET \
hcuri=/health \
hcinterval=10 \
hcfails=3 \
hcpasses=2 \
timeout=5
BalancerMember http://node2:8080 \
hcexpr=ok200 \
hcmethod=GET \
hcuri=/health \
hcinterval=10 \
hcfails=3 \
hcpasses=2 \
timeout=5
</Proxy>
-
hcinterval=10:每 10 秒探测一次 -
hcfails=3:连续 3 次失败才标记为 Down,防网络抖动误判 -
hcpasses=2:连续 2 次成功才恢复为 Up,避免刚恢复就导流 -
timeout=5:复用代理链路超时,间接控制探测总耗时(mod_proxy_hcheck无独立超时指令)
验证与观察状态变化
最直接的方式是访问 /balancer-manager(需启用 mod_manager)。重点关注三列:
- “Status”列显示 Down 且 “Failed” 计数持续增长 → 探测已触发、表达式可能未匹配
- “Succ” 列连续增加、“Failed” 归零 →
hcpasses正在累积,节点即将恢复 - 如果 “Succ” 卡住不动 → 检查后端
/health是否真返回了匹配表达式的响应内容
节点标记为 Down 后,新请求会立刻绕过;恢复为 Up 后,少量旧连接可能仍在途,属正常连接复用机制。

















