Apache中ProxyPass不支持直接设置超时与重试,必须通过<Proxy>容器内ProxySet指令配置:connectiontimeout控制TCP建连超时(如3秒),timeout控制整个代理生命周期(如30秒),二者需保持至少2秒梯度;负载均衡下retry用于节点故障冷却,ping用于调度前健康探测,且须配套验证端口连通性、后端accept超时及keepalive兼容性。

Apache 中 ProxyPass 本身不直接支持超时和重试参数,这些控制必须通过 <Proxy> 容器配合 ProxySet 指令实现,且需区分不同阶段的超时行为(建连、请求、健康探测)和重试逻辑(故障隔离)。写法不对,参数就无效。
connectiontimeout 和 timeout 必须写在 <Proxy> 块里
这两个值不能放在 ProxyPass 行中,也不能写在虚拟主机顶层。正确位置是包裹后端地址的 <Proxy> 容器内,并用 ProxySet 设置:
<Proxy "http://192.168.1.20:8000">
ProxySet connectiontimeout=3 timeout=30
</Proxy>
ProxyPass /api/ http://192.168.1.20:8000/
ProxyPassReverse /api/ http://192.168.1.20:8000/-
connectiontimeout=3:TCP 建连阶段最多等 3 秒(SYN 发出到收到 SYN-ACK) -
timeout=30:整个代理生命周期上限(含建连、发请求、收响应头+体),也等效于该 Proxy 下的ProxyTimeout
两者建议保持梯度,比如 connectiontimeout 比 timeout 小至少 2 秒,避免刚连上就被整体中断。
负载均衡场景下 retry 控制节点隔离时长
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
如果用了 balancer://,retry 是 BalancerMember 的参数,不是 ProxyPass 的:
<Proxy "balancer://cluster">
BalancerMember http://192.168.1.10:8080 retry=60
BalancerMember http://192.168.1.11:8080 retry=60
</Proxy>
ProxyPass /app/ balancer://cluster/
ProxyPassReverse /app/ balancer://cluster/-
retry=60:某节点返回连接失败(如 Connection refused)后,60 秒内不再向它分发请求 - 它不依赖 ping 探测,是独立的“故障冷却期”
ping 参数用于调度前即时健康检查(仅限 balancer)
只有在 BalancerMember 中才有效,且需满足前提:Apache ≥ 2.4.33、启用 mod_proxy_balancer 和对应协议模块:
BalancerMember http://192.168.1.30:3000 ping=5,HEAD,/health timeout=5 retry=30
-
ping=5,HEAD,/health:每次转发前,若距上次成功响应超 5 秒,先发 HEAD/health探测 - 探测失败(超时或非 2xx),本次跳过该节点,但不触发
retry计时 -
timeout=5是探测本身的等待上限(固定 1 秒默认值可被此覆盖)
配套必须做三件事,否则超时/重试形同虚设
- 在 Apache 服务器上执行
nc -zv 192.168.1.20 8000,确认后端端口真实可达 - 检查后端自身 accept 超时(如 Tomcat 的
connectionTimeout),它可能比 Apache 的connectiontimeout更长 - 若后端不支持 Keep-Alive 或存在连接状态 bug,加
ProxySet keepalive=off或disablereuse=On(后者仅适用于BalancerMember)
不复杂但容易忽略

















