必须开启keepalive=on并配好连接池,proxypass默认每次请求新建连接导致高并发下延迟倍增;需用proxyset设keepalive_timeout=5/max=50/smax=20/ttl=60/retry=30,确保与后端超时对齐,并启用健康检查与fallback路由防雪崩。

ProxyPass 本身不慢,慢的是它默认“每次请求都新建连接”——尤其在高并发或跨机房场景下,反复建连、TLS握手、后端排队会把延迟拉高几倍。要破这个瓶颈,得从连接复用、池控、超时对齐和错误容错四个层面下手。
必须开启 keepalive=on 并配好连接池
光写 ProxyPass /api http://10.0.1.10:8080/api 是不够的。默认行为是短连,每请求一建一销。
- 加上
keepalive=on:让 Apache 复用与后端的 TCP 连接,避免三次握手开销 - 用
ProxySet定义连接池参数,例如:ProxySet keepalive_timeout=5 max=50 smax=20 ttl=60 retry=30 -
max=50表示最多保持 50 个空闲连接;ttl=60表示空闲超时 60 秒(需略小于后端 keepalive_timeout) - 多个 ProxyPass 指向同一后端时,建议共用一个
<proxy></proxy>块统一管理,避免重复建池
超时必须前后端对齐
Apache 和后端(如 Tomcat/Nginx)的超时值若错位,会引发 502/504 或连接僵死。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- Apache 端:
ProxyTimeout 30(代理级总超时),配合keepalive_timeout=5 - 后端端:Tomcat 的
connectionTimeout="20000"、keepAliveTimeout="15000";Nginx 的keepalive_timeout 75s - 关键原则:Apache 的 keepalive_timeout ≤ 后端 keepAliveTimeout,ttl ≤ 后端 connectionTimeout
- 别漏掉
RequestReadTimeout,防慢速攻击耗尽连接
用健康检查 + fallback 路由防雪崩
复杂网络里后端偶发不可达很常见,静态配置会让流量持续打过去,加重故障。
- 启用
mod_proxy_hcheck,加健康探测:ProxyHCExpr ok {%{hc_status} == 200}ProxyPass /api http://backend1/ hcexpr=ok hcinterval=15 hcfail=2 hcsuccess=3 - 为每个后端显式设
route,再配fallbackroute实现自动降级,比如主中心挂了就切到灾备中心 - 加
ProxyBadHeader Ignore,防止某些中间设备插入非法头导致整条连接被丢弃
避免配置级反模式
有些看似“更严谨”的写法,反而放大性能问题。
- 别在 ProxyPass 后加
retry=0:这会让失败连接永不恢复,后续请求全堵住 - 别把
ttl设成 300+:空闲连接长期不释放,后端 fd 耗尽,滚动发布时易出现 stale connection - 别混用多个 ProxyPass 指向同一 IP:PORT 却不共享配置:每个指令独立建池,资源翻倍浪费
- 禁用
ProxyRequests On(默认 off):误开会导致正向代理暴露,间接影响反向代理调度稳定性










