apache负载均衡需启用mod_proxy、mod_proxy_http、mod_proxy_balancer、对应lbmethod及mod_slotmem_shm模块;再定义balancer集群、设置调度算法与权重;最后用proxypass绑定路径并配proxypassreverse。

Apache 负载均衡的流量分发,核心是通过 mod_proxy_balancer 模块定义后端集群,并用 ProxyPass 将请求路由到该集群,再由调度算法(如轮询、按流量)决定具体转发到哪台服务器。配置本身不复杂,但关键在模块启用、集群定义、算法选择和路径匹配这四步是否准确。
确认并启用必要模块
缺一不可,否则负载均衡无法启动:
- mod_proxy:提供代理基础能力
- mod_proxy_http:支持 HTTP 协议通信
- mod_proxy_balancer:实现集群管理与调度逻辑
- mod_lbmethod_byrequests 或 mod_lbmethod_bytraffic:指定调度算法(轮询或按流量)
- mod_slotmem_shm:必需,用于共享内存存储运行状态(如健康检查、连接数),否则 balancer-manager 会报错
验证命令:apachectl -M | grep -E 'proxy|lbmethod|slotmem'。若缺失,需在 httpd.conf 或 apache2.conf 中显式加载对应 LoadModule 行。
定义后端集群并设置分发策略
集群定义建议放在 <virtualhost></virtualhost> 内部,避免全局污染,也便于多域名独立管理。例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<proxy>
BalancerMember http://192.168.1.10:8080 loadfactor=3
BalancerMember http://192.168.1.11:8080 loadfactor=2
BalancerMember http://192.168.1.12:8080 loadfactor=1
ProxySet lbmethod=bytraffic
ProxySet timeout=5 retry=60
</proxy>
说明:
-
loadfactor控制权重:数值越大,分得请求越多;三台机器按 3:2:1 分配,实际比例就是 50% : 33% : 17% -
lbmethod决定算法:byrequests(按请求数轮询)、bytraffic(按响应字节数)、bybusyness(按当前活跃连接数) -
timeout和retry影响故障转移速度:超时短、重试快,能更快绕过异常节点
绑定路径与集群实现精准分发
用 ProxyPass 把特定 URL 前缀映射到集群,比如:
-
ProxyPass "/api/" "balancer://api/"→ 所有/api/xxx请求都走上面定义的集群 -
ProxyPass "/" "balancer://web/"→ 全站流量分发(慎用,注意静态资源一致性) - 若需静态资源单独分发,建议建独立集群如
balancer://static,并匹配/js/、/css/等路径
务必配对使用 ProxyPassReverse,确保后端返回的 Location、Set-Cookie 等响应头被正确重写,避免跳转或会话失效。
可选但推荐:启用健康检查与管理界面
让流量真正“智能”起来:
- 健康检查默认开启,依赖
mod_slotmem_shm;失败节点会被自动摘除,恢复后自动重新加入 - 加一段配置可访问实时状态页:
<location><br> SetHandler balancer-manager<br> Require local<br></location>
生产环境务必限制访问来源(如Require ip 192.168.1.0/24),不要开放给公网









