max是apache proxypass连接池硬上限,表示每个子进程向后端的最大并发连接数,非全局总数;须与proxypass或搭配使用,受mpm(如prefork中max实际为1)限制,配合smax、ttl可优化复用效率。

ProxyPass 的 max 参数不是独立指令,而是作为连接池配置项,嵌在 ProxyPass 或 <proxy></proxy> 块中使用的键值对。它控制的是每个 Apache 子进程(或线程)能为该后端维持的最大并发连接数,不是全局总连接数,也不是“最大请求数”。用错位置、忽略 MPM 限制、或混淆 max 和 smax,都会导致预期失效。
✅ 正确写法与生效前提
-
max必须和ProxyPass或<proxy></proxy>搭配使用,不能单独存在 - 仅对支持连接复用的协议有效(如
http://、https://;ajp://行为略有不同) - 要求
mod_proxy和对应协议模块(如mod_proxy_http)已启用 - 配置必须位于合法上下文:
server config、virtual host或directory,且不能套在<location></location>或<directory></directory>内部(除非明确允许)
示例(推荐写法):
<proxy>
ProxySet max=50 min=5 acquire=3000 retry=60
</proxy>
ProxyPass /api http://127.0.0.1:8080/api
ProxyPassReverse /api http://127.0.0.1:8080/api
或内联写法(等效):
ProxyPass /api http://127.0.0.1:8080/api max=50 min=5 acquire=3000
⚠️ 注意:
max=50表示每个 Apache 工作进程最多向该后端建 50 条 TCP 连接。若你用的是workerMPM 且ThreadsPerChild=64,那单个子进程最多开 64 线程 —— 此时max=50是安全的;但若用preforkMPM,每个子进程只处理 1 个请求,max实际上限就是 1(文档明确说明),设再大也无效。
? max 和 smax 的区别要分清
-
max是硬上限:Apache 绝不会超过这个数创建新连接(哪怕排队也要等) -
smax是柔性上限:连接数可临时超过smax,但超出部分会带ttl(生存时间),到期即回收
常见组合:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
ProxySet max=100 smax=80 ttl=60
含义:最多保持 100 连接;日常目标维持 80 条活跃连接;临时超量的连接最多活 60 秒。
不写 smax 时,默认等于 max;不写 ttl,超 smax 的连接可能长期滞留(尤其后端响应慢时),拖慢整体复用效率。
? 验证 max 是否真正起作用
- 查看当前连接数:
ss -tn src :80 | grep ":8080" | wc -l # 统计从 Apache 到后端 8080 的 ESTAB 连接
- 对比压测前后变化:用
ab或wrk发 100 并发请求,观察是否稳定卡在max值附近(而非持续增长) - 检查错误日志:若频繁出现
proxy: error reading status line from remote server或connection refused,可能是max设太小 + 后端响应慢,导致连接池耗尽排队
小技巧:把
max设为 5,再用curl -s http://localhost/api/test快速连 10 次,用netstat -an | grep :8080 | grep ESTA观察是否真只建了 5 条连接并复用 —— 这是最直接的验证方式。
⚙️ 调优建议:别只盯 max,要看整体水位
-
max值应略高于你的平均并发请求数 × 后端平均响应时长(秒) ÷ Apache 平均处理时长(秒),粗略估算即可 - 若后端是 Java 应用(如 Tomcat),检查其
maxConnections和acceptCount,确保不比 Apache 的max小太多,否则连接会在后端排队,Apache 看似空闲实则等待 - 配合
acquire=5000(获取连接超时 5 秒)防止线程无限阻塞;设retry=60让故障节点快速隔离 - 如果
MaxRequestWorkers(旧称MaxClients)设为 256,而你给每个后端都配max=100,又代理了 3 个服务,就可能触发 Apache 自身连接竞争 —— 此时需降低max或提升MaxRequestWorkers(注意系统资源)
不复杂但容易忽略。









