acquire参数控制apache等待后端可用连接的最大毫秒数,仅在启用keepalive且加载mod_proxy_http时生效,须通过块+proxyset或balancermember设置,单位为毫秒。

acquire 参数用于控制 Apache 在连接后端服务器时,等待可用连接的最大毫秒数。当连接池中没有空闲连接、且已达到 max 上限时,Apache 会阻塞等待,直到有连接释放或超时——这个等待上限就是 acquire。
它只在启用连接复用(如 HTTP/1.1 keepalive 后端)且使用 mod_proxy_http 等支持连接池的模块时生效。
✅ 正确配置 acquire 的位置和写法
acquire 不能单独写在 ProxyPass 行里作为独立参数(旧文档易误导),而必须通过 <proxy></proxy> 块 + ProxySet 指令设置,或直接在 BalancerMember 中指定:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
方式一:为 balancer:// 组统一设置(推荐)
<proxy balancer:>
BalancerMember http://127.0.0.1:8080
ProxySet acquire=3000
</proxy>
ProxyPass /app/ balancer://myapp/
ProxyPassReverse /app/ balancer://myapp/
方式二:为单个后端成员单独设置(更灵活)
<proxy balancer:>
BalancerMember http://127.0.0.1:8080 acquire=2000
BalancerMember http://127.0.0.1:8081 acquire=5000
</proxy>
方式三:非负载均衡场景(直连单后端)
ProxyPass /api/ http://127.0.0.1:3000/ acquire=1000 ProxyPassReverse /api/ http://127.0.0.1:3000/
⚠️ 注意:这种写法仅在 Apache ≥ 2.4.20 且
mod_proxy_http已加载时有效;低版本会忽略该参数。
? acquire 生效的前提条件
- 必须启用
mod_proxy和对应协议模块(如mod_proxy_http) - 后端服务需支持并开启 HTTP keepalive(如 Tomcat 的
connectionTimeout和keepAliveTimeout配置合理) -
ProxyPass必须实际指向该<proxy></proxy>或后端地址,否则参数不绑定 - 若使用
Prefork MPM,因每个进程仅 1 线程,连接池能力极弱,acquire实际意义有限;建议搭配Worker或EventMPM
? 如何验证 acquire 是否起作用?
-
确认模块已加载
apache2ctl -M | grep -E 'proxy|http' # 应看到 proxy_module, proxy_http_module 等
-
模拟高并发压测(例如用
ab或wrk)
设置并发数 >max值,观察:- 请求是否在约
acquire毫秒后返回503 Service Unavailable(连接池耗尽 + 等待超时) - 或是否成功排队并复用连接(响应时间略增但无 503)
- 请求是否在约
抓包或日志辅助判断
开启LogLevel debug并查看error_log,搜索proxy:,acquire,timeout等关键词,可看到连接获取行为记录。
⚠️ 常见误区与建议
-
acquire=0表示不等待,立即失败(快速拒绝),适合对延迟敏感的服务 -
acquire单位是毫秒,不是秒;写acquire=5是 5 毫秒,极易触发失败,慎用 - 不要盲目调大
acquire(如设为30000):用户请求会长时间卡住,可能引发上游超时(如 Nginx 的proxy_read_timeout) - 它和
timeout(整个代理请求超时)、retry(后端故障隔离时间)职责不同,别混淆
合理设置 acquire 能让 Apache 在连接资源紧张时做出可控响应,避免线程无限挂起,是反向代理稳定性的重要调节阀。










