failonstatus 参数通过后端返回指定HTTP状态码(如502/503/504)自动标记节点为down,实现被动健康检查;需配合retry参数控制恢复时间,不记录日志也不触发告警。

Apache 的 ProxyPass 指令通过 failonstatus 参数,可以在后端返回特定 HTTP 状态码时,自动将该节点标记为“失效”,实现故障节点的快速隔离。它不依赖主动探测,而是基于真实请求响应结果做判断,属于被动健康检查的核心机制。
failonstatus 的作用原理
当 Apache 作为反向代理转发请求到后端时,若后端返回的状态码落在 failonstatus 列表中,mod_proxy_balancer 会立即把该 BalancerMember 标记为 down,后续请求将跳过它,直到满足 retry 时间后才尝试恢复。
注意:该机制只影响负载调度行为,不会记录日志、不触发告警,也不改变后端实际运行状态。
基本配置语法与示例
在 <Proxy> 或 ProxyPass 行中直接指定:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
ProxyPass balancer://myapp/ http://192.168.1.10:8080/ failonstatus=502,503,504- 或更推荐的集群写法:
<Proxy "balancer://myapp"><br> BalancerMember http://192.168.1.10:8080 failonstatus=502,503,504 retry=60<br> BalancerMember http://192.168.1.11:8080 failonstatus=502,503,504 retry=60<br> </Proxy>
其中 retry=60 是关键配套参数——表示节点被标记 down 后,60 秒内不参与调度;超时后自动发起一次试探请求,成功即恢复上线,失败则继续隔离。
支持的状态码范围与注意事项
failonstatus 接受逗号分隔的数字列表,支持:
- 单个码:如
500 - 范围写法(Apache 2.4.33+):如
500-599(匹配所有 5xx) - 混合写法:如
502,503,504,404(也可用于隔离返回 404 的异常后端)
常见建议组合:
- 基础服务异常:
failonstatus=502,503,504(网关错误、服务不可用、网关超时) - 增强容错:
failonstatus=500-599,408,429(含服务器内部错误、请求超时、限流响应) - 慎用 4xx:除非确认是后端主动返回(如维护页),否则 404/403 等通常不应触发隔离,避免误伤正常节点
与其他健康机制的配合关系
failonstatus 是被动检查,需搭配其他机制形成闭环:
- 必须配
retry,否则节点一旦 down 就永久退出,无法自动恢复 - 可与
ping(Apache 2.4.33+)共存:ping 做主动探测,failonstatus 做请求级兜底,二者独立生效 - 不替代监控:它不产生日志或指标,建议同时开启
mod_status并定期抓取/server-status?auto中的lbstatus字段做外部监控 - 若需更精细控制(如连续 3 次 503 才隔离),需借助外部脚本 +
balancer-managerAPI 实现

















