Apache负载均衡需启用mod_proxy、mod_proxy_http、mod_proxy_balancer、调度算法模块(如mod_lbmethod_bybusyness)及mod_slotmem_shm;通过定义集群、ProxyPass绑定路径,并配置健康检查与真实IP传递。
apache 通过 mod_proxy_balancer 分发请求,本质是把反向代理能力升级为多后端协同工作的负载均衡器。它不是自动生效的“开关”,而是一套需手动组装、明确配置的模块协作机制。
核心前提:模块必须全启用且匹配
只开 mod_proxy 只能做单点代理;要分发请求,以下模块缺一不可:
-
mod_proxy(代理基础) -
mod_proxy_http(支持 HTTP 协议转发) -
mod_proxy_balancer(提供集群管理能力) - 至少一个调度算法模块,如
mod_lbmethod_byrequests(轮询)、mod_lbmethod_bybusyness(最少连接)或mod_lbmethod_bytraffic(按流量) -
mod_slotmem_shm(共享内存支撑状态页与运行时数据,否则 balancer 状态不可用)
验证方式:执行
apachectl -M | grep -E 'proxy|lbmethod|slotmem'
确保所有上述模块显示为 shared 或 static。
定义负载均衡集群:用 <proxy></proxy> 块声明逻辑组
在 httpd.conf 或虚拟主机外的配置段中添加:
<Proxy "balancer://myapp">
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 status=+H
ProxySet lbmethod=bybusyness
ProxySet timeout=5 retry=60
</Proxy>说明:
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
-
balancer://myapp是自定义集群名,后续通过它引用整个后端组 -
loadfactor按硬件能力设比例值(如 8核16G 设 3,4核8G 设 2),不强制归一化 -
status=+H表示热备节点,仅当其他节点全部失效时才启用 -
lbmethod=bybusyness实时依据当前活跃连接数分发,比轮询更能规避卡顿节点
绑定路径并启用分发:用 ProxyPass 指向集群
在同一配置文件中添加:
ProxyPass / http://myapp/ ProxyPassReverse / http://myapp/
注意:
- 这里
http://myapp/实际解析为balancer://myapp/,Apache 会自动识别协议前缀balancer:// -
ProxyPassReverse必须配对使用,否则后端返回的重定向Location头或 Cookie 路径会暴露内网地址,破坏 HTTPS 和登录态
可选但强烈建议的增强项
启用健康检查(Apache ≥ 2.4.43):
在BalancerMember行追加hcmethod=GET hcuri=/actuator/health hcinterval=10 hcfail=3 hcpass=2,让节点异常时自动隔离传递真实客户端 IP:
加上ProxyPreserveHost On,并在后端服务中启用对X-Forwarded-For和X-Forwarded-Proto的解析避免正向代理风险:确认配置中没有
ProxyRequests On,该指令仅用于企业内部代理,开启会引发安全与性能问题
不复杂但容易忽略

















