Apache用mod_proxy_hcheck监控后端需完成四步闭环:加载模块、绑定balancer://、配置hcmethod/hcuri等探测参数、用ProxyHCExpr解析响应内容判断真实可用性;缺一不可,且仅在balancer场景生效。
apache 用 mod_proxy_hcheck 监控后端,核心不是“打开一个开关”,而是把健康检查嵌入到负载均衡流程中——它只在 balancer:// 场景下工作,靠主动发请求、读响应、跑表达式来判断节点是否真可用。
确认并加载模块
该模块从 Apache 2.4.33 引入,但默认不启用;2.4.47+ 才稳定支持解析响应体等关键能力。
- 运行
httpd -M | grep proxy_hcheck,无输出说明未加载 - 手动添加(路径需与
httpd -V | grep SERVER_CONFIG_FILE一致):LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so - RHEL/CentOS 路径通常是
/usr/lib64/httpd/modules/,Debian/Ubuntu 是/usr/lib/apache2/modules/
绑定到 balancer 并配置探测参数
单独写 HCheck 或仅配 ProxyPass http:// 都不会触发检查。必须定义 balancer://,并在每个 BalancerMember 中显式声明健康参数:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 示例配置片段:
<Proxy "balancer://myapp"><br> BalancerMember http://10.0.1.10:8080 hcmethod=GET hcuri=/healthz hcinterval=5 hcfails=3 hcpasses=2<br></Proxy><br>ProxyPass "/api" "balancer://myapp/"
-
hcmethod=GET:发起真实 HTTP 请求(非 TCP 探活) -
hcuri=/healthz:必须是后端真实暴露的健康端点(如 Spring Boot 的/actuator/health) -
hcinterval=5:每 5 秒探测一次,太短易压垮后端,太长影响故障发现时效
用 ProxyHCExpr 做精准判断
默认逻辑只认状态码 2xx/3xx,对异步接口或业务型服务极易误判。必须用表达式结合响应内容做决策:
- 先定义表达式(放在主配置或
<IfModule proxy_hcheck_module>块内):ProxyHCExpr ok {%{REQUEST_STATUS} == 200 && hc('body') =~ /"status"\s*:\s*"UP"/} - 在
BalancerMember行中引用:BalancerMember http://10.0.1.20:8080 hcexpr=ok hcuri=/health/ready - 若需解析响应体,还需加
hctemplate声明(如hctemplate="application/json"启用 JSON 解析与解压缩) - 旧版 Apache 不支持
hc('body'),可退而求其次用响应头:ProxyHCExpr ok {%{hc resp header X-Ready} == "true"},要求后端主动写入该头
验证和调试要点
配置完不等于生效,需主动验证闭环是否打通:
- 开启 trace8 日志:
LogLevel proxy_hcheck:trace8,查看探测请求发出、响应接收、表达式执行全过程 - 用
curl -v http://10.0.1.10:8080/healthz手动确认后端端点返回符合预期(结构、字段、状态码) - 检查
mod_status页面(http://localhost/server-status?auto),观察balancer段中各节点的State是否随探测结果动态变化(Init→Ok或Err) - 模拟后端异常:临时停掉服务或让健康接口返回 503/错误 body,观察 Apache 是否在
hcfails次后将节点标为Down

















