apache中proxypass默认不复用后端连接,需显式配置keepalive=on开启复用,并配合proxyset设置keepalive_timeout、max等参数,同时后端(如tomcat)须支持http/1.1持久连接且connectiontimeout≥apache的keepalive_timeout。

Apache 中 ProxyPass 本身默认不复用后端连接,每次请求都会新建 TCP 连接到后端(如 Tomcat、Node.js 等),这在高并发或短请求场景下会显著拖慢响应、耗尽后端连接资源。要真正实现长连接复用,必须显式启用并协同调优多个配置项。
ProxyPass 的 keepalive=on 是开启后端连接复用的开关
它告诉 Apache:对这个代理目标,尽量复用已建立的空闲连接,而不是每次都重新建连。写法示例:
ProxyPass /api http://127.0.0.1:8080/api keepalive=on
仅加 keepalive=on 不够,还需 ProxySet 控制连接池行为ProxySet 用于精细化管理该后端连接池,关键参数包括:
-
keepalive_timeout=5:空闲连接最多保留 5 秒(建议设为 ≤ 后端的 connectionTimeout,如 Tomcat 默认 20000ms) -
max=50:每个 worker 最多维护 50 个空闲连接 -
acquire=3000:获取连接超时毫秒数(避免阻塞等待)
示例完整配置:
ProxyPass /api http://127.0.0.1:8080/api keepalive=on ProxySet keepalive_timeout=5 max=50 acquire=3000
后端必须支持 HTTP/1.1 持久连接,并合理配置
- Tomcat 的
server.xml中 Connector 需启用 keep-alive(默认已开),且connectionTimeout建议 ≥ 20000 - 使用 NIO/NIO2 连接器,避免 BIO 模式下每个长连接独占线程
-
maxConnections应 ≥ Apache 可能维持的最大空闲连接数 × 并发请求数
前端连接也要配合优化,避免成为瓶颈
- 启用
eventMPM(非prefork或worker),更适合长连接管理 - 全局开启
KeepAlive On,设KeepAliveTimeout 5和MaxKeepAliveRequests 100 - 添加
ProxyPreserveHost On,确保 Host 头透传,避免后端路由异常
验证是否生效的关键方法
- 查看 Apache
mod_status页面(需启用mod_status),观察proxy连接池中idle连接数是否稳定存在 - 抓包对比:连续两次
/api请求是否复用了同一 TCP 连接(源端口不变、无 SYN 包) - 日志中检查
mod_proxy的 debug 级日志,搜索reuse或reusing connection字样
不复杂但容易忽略











