Apache代理不主动通告故障,而是通过balancer-manager暴露健康状态、ErrorDocument统一接管502/503/504错误页并透传状态码、mod_rewrite前置探测全集群失效时跳转维护页、以及proxy日志结构化记录故障节点信息,实现可识别、可定位、可兜底的故障感知与响应。

Apache 代理本身不主动“通告”故障,而是通过状态暴露、错误页面接管和外部可观测性协同实现统一故障感知与响应。核心不是发通知,而是让故障可识别、可定位、可兜底。
暴露集群实时健康状态
启用 mod_status 和 balancer-manager 模块,提供内网可访问的运行时视图:
- 在虚拟主机中添加:
<Location "/balancer-manager"> Require ip 10.0.0.0/8 </Location>(限制仅内网访问) - 访问
https://your-proxy/balancer-manager即可看到每个BalancerMember的当前状态(Ok / Err / Dis)、已处理请求数、失败次数、上次检查时间 - 所有成员必须带
status=+H才参与健康检查并显示在管理页中
统一接管代理层错误页并透传真实状态码
让用户和监控系统第一时间感知后端不可用,而非看到空白或默认 Apache 错误:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 开启开关:
ProxyErrorOverride On - 显式映射关键状态码:
ErrorDocument 502 /errors/down.html、ErrorDocument 503 /errors/down.html、ErrorDocument 504 /errors/down.html - 立即排除错误页路径:
ProxyPass /errors/ !(放在所有ProxyPass规则之前) - 确保
/errors/down.html是静态文件(或动态页开头加http_response_code(503)),且大小 ≥256 字节
前置健康探测 + 自动降级跳转(可选增强)
在用户请求到达前就发现全集群失效,提前触发兜底逻辑:
- 为每个
BalancerMember配置主动探针,例如:hcmethod=GET hcuri=/actuator/health hcinterval=15 hcfail=3 hcpass=2 - 配合
mod_rewrite检测无可用 worker:RewriteCond %{ENV:balancer_worker_route} ^$ - 满足条件时重定向至维护页或外部告警入口:
RewriteRule ^(.*)$ /errors/maintenance.html [R=503,L]
日志中结构化标记故障节点与原因
便于对接 ELK 或 Prometheus,把“谁挂了、为什么挂”写进日志:
- 启用详细代理日志:
LogLevel proxy:debug(生产环境建议调为warn) - 自定义日志格式,加入后端响应状态与 worker 标识:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{BALANCER_NAME}e %{BALANCER_WORKER_ROUTE}e" combined_proxy - 当出现
503 Service Unavailable且BALANCER_WORKER_ROUTE为空时,即表示全部后端已被标记为 down

















