apache负载均衡集群需启用mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_slotmem_shm及至少一个lbmethod模块;在virtualhost中定义balancer组,配置权重、热备、粘性会话与静态资源分流,并推荐启用健康检查和状态页。

Apache 负载均衡集群基于 ProxyPass 搭建,核心是用 mod_proxy_balancer 定义后端服务器组,并通过 ProxyPass 将请求分发到该组。它不是简单转发,而是构建可调度、可监控、可伸缩的代理集群——关键在配置层级清晰、模块启用完整、路由逻辑明确。
必须启用的模块
缺一不可,否则 balancer:// 协议无法识别,配置会报错:
-
mod_proxy:提供基础代理能力 -
mod_proxy_http:支持 HTTP 后端通信(若后端是 HTTPS,还需mod_proxy_https) -
mod_proxy_balancer:实现集群管理与调度逻辑 -
mod_slotmem_shm:共享内存模块,用于保存节点状态和会话信息,没有它,健康检查和 sticky session 都不生效 - 至少一个负载算法模块,如
mod_lbmethod_byrequests(轮询)、mod_lbmethod_bytraffic(按流量)或mod_lbmethod_bybusyness(按繁忙度)
在 VirtualHost 内定义 balancer 集群
把所有负载均衡配置限定在单个 <virtualhost></virtualhost> 块中,避免全局污染,也方便多域名独立管理:
<virtualhost> ServerName app.example.com <p><proxy balancer:> BalancerMember <a href="https://www.php.cn/link/4fbe9e8a0ace3a44f0a9e1d7fe41da02">https://www.php.cn/link/4fbe9e8a0ace3a44f0a9e1d7fe41da02</a> loadfactor=3 route=node1 BalancerMember <a href="https://www.php.cn/link/6cf8ae4c2312ba4a0103e20d0ace1ea3">https://www.php.cn/link/6cf8ae4c2312ba4a0103e20d0ace1ea3</a> loadfactor=2 route=node2 BalancerMember <a href="https://www.php.cn/link/f0b2257261d359354fc5fef47e80e110">https://www.php.cn/link/f0b2257261d359354fc5fef47e80e110</a> status=+H # 热备节点,仅当其他故障时启用 ProxySet lbmethod=byrequests ProxySet stickysession=JSESSIONID|jsessionid </proxy></p> <p>ProxyPass / balancer://myapp/ ProxyPassReverse / balancer://myapp/ </p></virtualhost>
说明:
-
loadfactor控制权重分配,数值越大承担请求越多 -
route=node1是开启粘性会话的必要标识,配合stickysession使用 -
status=+H表示该成员为热备(hot standby),默认不参与轮询 -
ProxyPass / balancer://myapp/中末尾斜杠很重要,影响路径拼接行为
静态资源分流不走集群
避免把图片、JS、CSS 等请求也压到应用集群,用 ProxyPass 排除规则提前拦截:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
ProxyPass /static !:表示以/static开头的请求不代理,由 Apache 本地服务(如 DocumentRoot 下的 static 目录)响应 -
ProxyPassMatch ^/(.*\.(jpg|png|css|js))$ !:正则匹配常见静态后缀,直接跳过集群 - 再配一条
ProxyPass / balancer://myapp/,确保其余请求才进集群
注意顺序:排除规则必须写在主 ProxyPass 之前,Apache 按配置顺序匹配。
启用健康检查与状态页(可选但推荐)
让集群具备自愈能力,并便于运维观察:
- 添加
ping=5到BalancerMember,例如:BalancerMember https://www.php.cn/link/4fbe9e8a0ace3a44f0a9e1d7fe41da02 ping=5,表示每 5 秒向后端发 HEAD 请求探测存活 - 启用
mod_status和mod_proxy_balancer的管理界面:<location> SetHandler balancer-manager Require ip 10.0.0.0/8 </location>
访问
http://yourdomain.com/balancer-manager可查看各节点状态、手动启停、调整权重
不复杂但容易忽略:模块加载顺序、ProxyPass 规则先后、route 与 stickysession 的配合、以及共享内存模块的强制依赖。把这些理清楚,集群就能稳稳跑起来。









