Apache中ProxyPass本身不处理故障转移,真正容错依赖BalancerMember、健康探测参数和调度策略协同;必须启用mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_slotmem_shm模块,否则报503或配置失效。

Apache 中 ProxyPass 本身不处理故障转移,真正实现容错靠的是 BalancerMember + 健康探测参数 + 调度策略协同。ProxyPass 只负责把请求发给一个已定义好的负载均衡组(balancer://xxx),而这个组内部才决定“谁来接、何时换、换几次”。
必须启用的模块
缺一不可,否则 ProxyPass 会报 503 或配置不生效:
-
mod_proxy:代理基础框架 -
mod_proxy_http:转发 HTTP/HTTPS 请求(常被遗漏) -
mod_proxy_balancer:管理后端集群与状态 -
mod_slotmem_shm:共享内存存储节点状态(Apache 2.4+ 必需)
基础故障转移配置结构
在虚拟主机或主配置中写入以下结构(以三台后端为例):
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
<Proxy balancer://api>
BalancerMember http://10.0.1.10:8080 loadfactor=2 retry=60 timeout=5
BalancerMember http://10.0.1.11:8080 loadfactor=2 retry=60 timeout=5
BalancerMember http://10.0.1.12:8080 status=+H
</Proxy>
ProxyPass /api/ balancer://api/
ProxyPassReverse /api/ balancer://api/
说明:
-
retry=60:节点失败后,60 秒内不参与调度,到期自动重试 -
timeout=5:单次连接/响应超时设为 5 秒,避免长卡阻塞 -
status=+H:标记为热备节点,仅当其他所有节点都不可用时才启用 -
loadfactor用于权重分配,非必需但建议设为相同值以保证轮询公平
增强型故障感知(推荐生产环境)
仅靠被动失败(如超时、5xx)有延迟,建议加主动健康检查:
- 启用
mod_proxy_hcheck(Apache ≥2.4.43) - 为每个节点加健康探测参数:
hcmethod=HTTP hcuri=/health hcinterval=5 hcfail=2 hcpass=2 - 搭配
failonstatus=500-599:收到任意 5xx 就立即标记为失效 - 加
ping=3:转发前先发 HEAD 探测,3 秒无响应则本次跳过该节点
验证与调试技巧
快速确认节点是否被正确识别和隔离:
- 启用
/balancer-manager管理界面(仅限内网),实时查看各节点状态(Up/Down/Hot Standby) - 用
curl -I http://your-lb/balancer-manager?json=1获取 JSON 状态,便于脚本监控 - 模拟故障时,可临时用
curl调整权重或强制下线:curl "http://lb/balancer-manager?b=api&w=http://10.0.1.11:8080&dw=0"

















