apache中配置负载均衡持久化连接需显式启用proxypass keepalive=on,并同步调优keepalive_timeout≤后端connectiontimeout、timeout=5、retry=30,后端tomcat须设keepalivetimeout≥apache值且disableuploadtimeout="false",mpm必须切换为event模式。

在 Apache 中配置负载均衡的持久化连接(Keep-Alive),核心不是只开一个开关,而是让客户端→Apache→后端服务器三层连接都真正复用,尤其要防止中间层(Apache 代理)把本该复用的连接变成“一请求一断开”。关键在 ProxyPass 的 keepalive=On + 后端协同 + MPM 模式适配。
ProxyPass 必须显式启用 keepalive=On
Apache 默认不为反向代理开启后端长连接。即使前端 KeepAlive 已开,若 ProxyPass 没加参数,每次请求仍会新建 TCP 连接到后端(如 Tomcat、Node.js)。
- ✅ 正确写法(直接附加在 ProxyPass 行尾):
ProxyPass /api http://10.0.1.10:8080/api keepalive=On - ❌ 错误写法:
ProxySet keepalive=On(单独写在块里,易被覆盖;且不作用于单条 ProxyPass)
ProxyPass /api http://10.0.1.10:8080/api(漏掉 keepalive=On,等于没配)
超时与复用上限必须前后端对齐
只开 keepalive=On 不设超时,会导致空闲连接堆积,后端连接池迅速耗尽(例如 Tomcat 默认 maxConnections=200,100 个 Apache 连接 × 每个发 3 请求 = 直接打满)。
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
keepalive_timeout=5:Apache 到后端的空闲等待时间,建议 3–6 秒,必须 ≤ 后端 connectionTimeout(如 Tomcat 的
connectionTimeout="20000") - timeout=5:单次请求最大等待时长,防慢后端拖垮连接池
- retry=30:后端故障后,该连接 30 秒内不参与新请求分发,避免雪崩
- MaxKeepAliveRequests 100:每个长连接最多承载 100 个请求,避免异常客户端长期霸占连接
后端服务必须同步支持并匹配策略
Apache 开了 keepalive=On,但后端主动断连,复用就失效。以 Java 应用常用 Tomcat 为例:
- HTTP Connector 需确认:
keepAliveTimeout="30000"(≥ Apache 的 keepalive_timeout)maxKeepAliveRequests="0"(不限制请求数,交由 Apache 控制)disableUploadTimeout="false"(禁用此项,否则上传中可能中断 Keep-Alive) - 检查响应头是否含
Connection: keep-alive,严禁后端代码手动写:response.setHeader("Connection", "close") - 协议版本统一:Apache 和后端都用 HTTP/1.1,避免 HTTP/1.0 客户端触发降级断连
高并发必须切换为 event MPM
prefork MPM 下,每个长连接独占一个进程,万级并发时内存爆炸;worker MPM 线程也易阻塞。只有 event MPM 支持真正的异步 I/O 处理长连接。
- 停用 prefork:
a2dismod mpm_prefork - 启用 event:
a2enmod mpm_event - 验证生效:
httpd -V | grep -i mpm输出应含mpm_event - 配套系统调优:
net.core.somaxconn = 65535,提升连接队列容量










