Apache本身不重试请求,所谓“超时自动重试”实为mod_proxy_balancer的故障转移机制:当后端因timeout=5超时或failonstatus=500-599返回5xx失败时,立即换另一节点再试一次(需maxattempts=2),retry=15控制节点冷却期,并用ping=5,HEAD,/health主动探测,全宕时通过mod_rewrite跳转maintenance.html。

必须启用负载均衡模块并使用 balancer:// 协议
仅用 ProxyPass / http://backend/ 不会触发任何重试逻辑。
- 确保已启用
mod_proxy_balancer(Ubuntu/Debian 执行a2enmod proxy_balancer;RHEL/CentOS 检查LoadModule proxy_balancer_module是否加载) - 后端必须定义在
<Proxy "balancer://xxx"></Proxy>块内 -
ProxyPass目标必须是balancer://xxx,例如:ProxyPass / balancer://api/
设置核心重试参数:maxattempts、timeout、retry
这三个参数缺一不可,共同决定是否“换节点再试”以及何时恢复节点。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- maxattempts=2:默认为 1,设为 2 才表示允许失败后换一个节点再试一次;设为 3 可最多尝试三个节点
-
timeout=5:单次请求等待后端响应上限为 5 秒,超时即放弃当前节点,触发
maxattempts逻辑 - retry=15:节点被标记为失效后,15 秒内不参与新请求分发;超时后首次请求会试探,成功则立刻恢复,失败则继续隔离
主动识别失败,不止靠超时
只等超时太被动,还需覆盖常见业务异常:
-
failonstatus=500-599:收到任意 5xx 响应后立即标记该节点失效,进入
retry冷却期 - ping=5,HEAD,/health(Apache ≥ 2.4.33):每 5 秒对健康接口发 HEAD 探针;失败则本次跳过该节点(不改变状态,也不计入 retry)
- 注意
ping和timeout应错开——例如后端 P95 响应为 8 秒,可设ping=10、timeout=12,避免探针误杀正常节点
兜底降级:所有后端都不可用时返回静态页
当全部节点处于 retry 冷却期或全被标记为 DOWN,Apache 默认返回 503。可用 mod_rewrite 拦截并转向本地页面:
- 添加配置:
RewriteCond %{ENV:REDIRECT_STATUS} ^503$RewriteRule ^(.*)$ /maintenance.html [R=503,L] - 确保
/maintenance.html存在于网站根目录下

















