acquire参数控制apache连接后端时阻塞等待空闲连接的最大毫秒数,仅在启用keepalive且加载mod_proxy_http时生效,必须通过块内proxyset或balancermember设置,不可直接写在proxypass行末。
acquire 参数控制 apache 在连接后端时,当连接池已满、没有空闲连接可用时,阻塞等待其他连接释放的最长时间(毫秒)。它只在启用 keepalive 且使用 mod_proxy_http 的场景下生效,不能直接写在 proxypass 行末尾,必须通过 <proxy></proxy> 块配合 proxyset 或 balancermember 设置。
acquire 参数必须放在 <proxy></proxy> 容器里
Apache 不允许在 ProxyPass 指令中直接加 acquire=3000 这类参数(旧文档易误导)。正确位置是 <proxy></proxy> 块内,用 ProxySet 指令统一设置,或在 BalancerMember 中为单个后端单独指定。
例如,负载均衡场景下统一设置:
<proxy balancer:>
BalancerMember http://127.0.0.1:8080
BalancerMember http://127.0.0.1:8081
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>
非负载均衡直连场景(Apache ≥ 2.4.20)也支持简写:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
ProxyPass /api/ http://127.0.0.1:3000/ acquire=1000 ProxyPassReverse /api/ http://127.0.0.1:3000/
但注意:该写法仅在 mod_proxy_http 已加载时有效,低版本会静默忽略。
acquire 的实际作用和典型取值
- 当连接池达到
max上限、又无空闲连接时,Apache 会等待最多acquire毫秒,等某个连接被释放; - 超过该时间仍无连接可用,请求直接失败(返回 503 或 502);
- 建议值参考后端平均响应时间的 2–3 倍,比如后端 P95 是 800ms,可设
acquire=2500; - 过小(如 100)会导致频繁拒绝;过大(如 10000)可能让请求堆积,拖慢整体吞吐。
配套关键参数要同步检查
acquire 不是孤立参数,需与以下几项协同:
-
max和smax:决定连接池容量上限,acquire只在池满时起作用; -
retry:连接失败后多久重试,默认 60 秒,应略大于acquire,避免刚超时就重试; -
timeout(ProxySet 中):控制整个代理生命周期,建议设为acquire的 1.5 倍左右; -
keepalive=on:acquire仅在复用连接场景下生效,关闭 keepalive 后该参数无效。
例如完整配置片段:
<proxy balancer:>
BalancerMember http://192.168.1.10:8080
ProxySet acquire=3000 timeout=4500 keepalive=on retry=60
</proxy>
ProxyPass /backend/ balancer://api/
ProxyPassReverse /backend/ balancer://api/
这样既控制了阻塞等待时长,也明确了连接复用和故障恢复边界。










