failonstatus是mod_proxy_balancer中用于被动健康检查的关键参数,通过匹配后端返回的500-599等错误状态码触发节点失效与冷却期;需在<Proxy>块中配合BalancerMember或ProxySet配置,如failonstatus=500,502,503,504,并协同retry、timeout、maxattempts等参数生效。

failonstatus 是 Apache mod_proxy_balancer 中用于被动健康检查的关键参数,它让 Apache 在收到后端返回的特定 HTTP 状态码时,立即将该节点标记为“失败”,从而触发故障隔离(如跳过该节点、启动 retry 冷却期等)。它不单独生效,必须配合 BalancerMember 或 ProxySet 使用。
failonstatus 的作用逻辑
- 它不是拦截或修改响应状态码,而是监听后端真实返回的状态码
- 一旦匹配,Apache 就认为这次请求“失败”,计入失败计数(受
hcfail或被动失败策略影响) - 连续失败达到阈值(如
hcfail=3或默认被动失败机制)后,节点被标记为down - 同时触发
retry倒计时:冷却期一过,自动重新参与负载
✅ 注意:
failonstatus只对BalancerMember生效,不能写在ProxyPass指令里;它也不适用于普通ProxyPass http://...(非 balancer 地址)。
怎么配置 failonstatus
在 <Proxy balancer://xxx> 块中,为每个后端成员或整个 balancer 统一设置:
<Proxy balancer://myapp>
BalancerMember http://192.168.1.10:8080 route=node1 failonstatus=500,502,503,504
BalancerMember http://192.168.1.11:8080 route=node2 failonstatus=500,502,503,504
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/也可以统一设置到整个 balancer(推荐,避免重复):
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<Proxy balancer://myapp>
BalancerMember http://192.168.1.10:8080 route=node1
BalancerMember http://192.168.1.11:8080 route=node2
ProxySet failonstatus=500,502,503,504
</Proxy>常用状态码建议
-
500:服务端内部错误(如 Java 应用崩溃、NPE) -
502:网关错误(后端未响应、进程挂掉、反向代理链路断开) -
503:服务不可用(常见于 Spring Boot 启动中、健康检查失败、限流熔断) -
504:网关超时(后端响应慢,可能卡在 GC、DB 锁、网络抖动)
⚠️ 不建议加入
4xx(如 404、401),它们通常是业务正常反馈,不应导致节点下线。
配合使用的必要参数
-
retry=60:节点失败后 60 秒再尝试恢复(应对瞬时抖动) -
timeout=5:单次请求最多等 5 秒,超时即算失败(配合failonstatus触发更快) -
maxattempts=1:单个请求最多重试 1 次(防止雪崩式重试) -
loadfactor=1:可结合权重,在部分节点异常时降低其流量占比
示例完整片段:
<Proxy balancer://myapp>
BalancerMember http://10.0.1.10:8080 route=s1 loadfactor=2 timeout=5 retry=5
BalancerMember http://10.0.1.11:8080 route=s2 loadfactor=2 timeout=5 retry=5
ProxySet failonstatus=500,502,503,504 maxattempts=1
</Proxy>
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/验证是否生效
- 访问
/balancer-manager页面,查看各节点状态、失败计数(Elected和Status列) - 手动让某台后端返回
503(如临时返回curl -I -H "Host: example.com" http://192.168.1.10:8080/test返回 503),观察其状态是否变为down,并记录Retry in ... sec - 查看 Apache error log,搜索
proxy_balancer: worker相关日志,确认是否打印failed status或recovered
不复杂但容易忽略。

















