apache mod_proxy_balancer不支持重试次数,仅控制故障节点隔离时长(retry)和代理各阶段超时(connectiontimeout、timeout);retry设于balancermember中表示故障后冷却秒数,connectiontimeout和timeout需在块中配置,分别控制建连和全链路超时。
apache mod_proxy_balancer 本身不提供“重试次数”概念,也不支持连接失败后自动重发请求。它真正控制的是**故障节点的隔离时长(retry)**和**单次代理请求各阶段的超时(timeout、connectiontimeout)**。这些参数必须写在 <proxy></proxy> 容器或 balancermember 指令中,不能直接加在 proxypass 行里。
connectiontimeout 和 timeout 要写在 块里
这两个值决定 Apache 与某个后端节点建立连接和完成整个代理过程的时间上限:
- connectiontimeout:TCP 连接建立超时(从发出 SYN 到收到 SYN-ACK),单位秒,建议设为 2–5 秒
-
timeout:整个代理生命周期上限(含建连、发请求、收响应头+体),单位秒,建议比
connectiontimeout至少大 2 秒,常见值为 30–60 秒
正确写法示例:
ProxySet connectiontimeout=3 timeout=45
retry 是 BalancerMember 的专属参数
它不是“重试几次”,而是指该节点被标记为故障后,**多少秒内不再向它转发新请求**:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 仅在
BalancerMember中生效,例如:BalancerMember http://192.168.1.10:8080 retry=60 - 触发条件是连接失败(如 Connection refused)、响应超时或
failonstatus匹配到错误状态码(如 502/503) - 这个冷却期独立于健康探测,即使没配
ping也会生效
可选:用 ping 实现调度前轻量探测
如果需要在每次分发请求前做一次快速探活,可启用 ping 参数:
- 要求 Apache ≥ 2.4.33,且已加载
mod_proxy_balancer和对应协议模块(如mod_proxy_http) - 写法示例:
BalancerMember http://192.168.1.10:8080 ping=5,HEAD,/health,表示每 5 秒发一个 HEAD 请求探测/health路径 - 若探测失败,节点会被立即标记为不可用,并启动
retry冷却计时
别忘了全局 ProxyTimeout 协同设置
ProxyTimeout 是作用于整个虚拟主机或 Location 的兜底超时,优先级低于 ProxySet timeout,但必须显式设置以防继承默认 60 秒:
- 放在
<virtualhost></virtualhost>或<location></location>块中即可 - 建议设为后端 P95 响应时间的 2–3 倍,比如后端通常 10 秒返回,这里设
ProxyTimeout 30 - 它不控制建连,只管“等响应”的总时长,所以要和
connectiontimeout配合使用









