acquire参数控制Apache获取后端连接的最大阻塞等待毫秒数,仅在启用keepalive且加载mod_proxy_http时生效,必须通过<Proxy>块+ProxySet或BalancerMember设置,不能直接写在ProxyPass末尾。
acquire 参数不能直接写在 proxypass 指令末尾,它控制 apache 从连接池中获取后端连接时的最长阻塞等待时间(单位毫秒),只在启用 keepalive 且加载 mod_proxy_http 时生效。
acquire 必须通过 块 + ProxySet 或 BalancerMember 设置
Apache ≥ 2.4.20 才支持 acquire,且仅对支持连接复用的后端(如 HTTP/1.1 keepalive 服务)起作用。常见错误是把它当作 ProxyPass 的独立参数,实际会被静默忽略。
- 在
<Proxy balancer://xxx>块中统一设置:ProxySet acquire=3000 - 为单个后端节点单独指定:
BalancerMember http://192.168.1.10:8080 acquire=2500 - 直连单后端(非负载均衡)时,可写在 ProxyPass 行尾,但仅限高版本:
ProxyPass /api/ http://127.0.0.1:3000/ acquire=1000
搭配 retry 和 timeout 才能稳定生效
acquire 单独设置效果有限,需配合其他参数协同控制连接行为:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
retry=60:节点失败后标记为不可用的时间(秒),避免短时抖动反复触发 acquire 等待 -
timeout=5:后端响应超时,防止 acquire 等待期间请求卡死 -
keepalive=on:确保连接复用机制启用,否则 acquire 不参与调度
验证 acquire 是否起作用的方法
不能只看配置是否写对,要观察实际连接行为:
- 并发压测时,用
netstat -anp | grep :8080 | grep ESTABLISHED | wc -l查看后端连接数是否趋于稳定(说明连接池被复用) - 人为制造后端满载(如限制 max=2),再发起超过阈值的并发请求,观察响应延迟是否接近 acquire 设定值(如 3000ms)
- 检查 error_log 中是否有
proxy: error reading status line from remote server类报错,可能意味着 acquire 超时后连接被丢弃
常见误配与规避建议
acquire 容易被低版本或模块缺失导致失效:
- 确认已启用 mod_proxy 和 mod_proxy_http:
apache2ctl -M | grep proxy - Apache 2.4.19 及更早版本不识别 acquire,必须升级
- 若后端返回
Connection: close或使用 HTTP/1.0,keepalive 不生效,acquire 自然无效 - 不建议在全局配置中定义
,应放在对应 内,避免跨虚拟主机冲突

















