acquire参数用于控制Apache代理等待空闲连接的最大时间(毫秒),超时返回503错误,仅对启用HTTP/1.1 keepalive的后端生效,须配合mod_proxy及对应协议模块,在ProxyPass指令或块内ProxySet中设置,且需后端支持keepalive、MPM未成为瓶颈。

acquire 参数用于控制 Apache 代理在连接后端时,等待空闲连接的最大时间(单位:毫秒),超时则返回 503 错误。它只对启用了连接复用的后端(如 HTTP/1.1 + keepalive)生效,且必须配合 mod_proxy 和对应协议模块(如 mod_proxy_http)使用。
acquire 参数的正确写法和位置
acquire 必须写在 ProxyPass 指令中,或通过 块内的 ProxySet 设置。单独写在 VirtualHost 顶层或 .htaccess 中无效。
- 直接在 ProxyPass 中设置(推荐,简洁明确):
ProxyPass /api/ http://127.0.0.1:8080/api/ acquire=5000 - 在 balancer 场景中配合 ProxySet 使用:
<proxy balancer:><br> BalancerMember http://127.0.0.1:8080 acquire=5000<br></proxy><br> ProxyPass /app/ balancer://myapp/
acquire 生效的前提条件
这个参数不是“写了就起作用”,需同时满足以下几点:
- 已启用
mod_proxy和mod_proxy_http(或对应协议模块),可通过apache2ctl -M | grep proxy验证 - 后端服务支持并开启了 HTTP keepalive(例如 Tomcat 的
keepAliveTimeout、Nginx 的keepalive指令) - ProxyPass 实际指向了该后端地址(即请求路径真会走到这个配置项)
- Apache 的 MPM 并发能力(如
MaxRequestWorkers)未成为瓶颈,否则连接排队发生在更上层,acquire 不会触发
常见问题与调优建议
acquire 设得太小(如 100ms),容易在瞬时高峰时频繁返回 503;设得太大(如 30000),又会让用户等待过久。建议结合后端平均响应时间和并发压测结果调整:
- 普通 API 接口(P95 响应
- 长任务接口(如导出、批量处理):acquire 可适当放宽,但更关键的是同步调大
timeout和后端超时,避免 acquire 等待还没结束,后端已断连 - 若观察到大量 503 且 netstat 显示后端连接数长期打满,说明 acquire 在起作用,此时应优先扩容后端或优化其连接复用效率,而非一味调高 acquire
验证 acquire 是否生效
不能只看配置语法是否通过,要实测行为:
- 用
curl -v http://your-proxy/api/test观察响应头中的Connection: keep-alive和Keep-Alive: timeout=xx - 模拟后端连接池耗尽:临时限制后端最大连接数(如 Nginx 的
limit_conn),然后并发发起请求,确认部分请求在约 acquire 毫秒后返回 503 - 查 Apache 错误日志,搜索 “proxy: error” 或 “acquire timeout”,有相关记录即说明逻辑已介入











