Apache mod_proxy_balancer需手动配置:启用mod_proxy、mod_proxy_http、mod_proxy_balancer和mod_lbmethod_byrequests四个模块;在VirtualHost中用定义balancer://集群,设置BalancerMember及lbmethod;通过ProxyPass/ProxyPassReverse绑定路径并开启健康检查(status=+H)。

Apache mod_proxy_balancer 实现基础负载均衡,核心是启用必要模块、定义后端集群、设置分发策略,并将流量代理到该集群。它不是开箱即用的功能,必须手动配置且结构清晰才能生效。
确认并加载关键模块
mod_proxy_balancer 本身不提供算法,也不处理 HTTP 协议,需搭配多个模块协同工作:
- mod_proxy:提供反向代理基础能力(必须)
- mod_proxy_http:支持与后端 HTTP 服务通信(必须)
- mod_proxy_balancer:实现集群管理与调度逻辑(必须)
- mod_lbmethod_byrequests:提供默认轮询算法(Apache 2.4 中需显式加载,不能省略)
验证方式:httpd -M | grep -E 'proxy|lbmethod',应同时看到上述四个模块。Ubuntu/Debian 可运行 sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests;RHEL/CentOS 需检查 /etc/httpd/conf.modules.d/00-proxy.conf 中对应 LoadModule 行是否启用。
在虚拟主机中定义 balancer 集群
把后端节点和调度规则封装在 <proxy></proxy> 块内,作用域限定在当前 <virtualhost></virtualhost> 中,避免全局冲突:
- 使用
balancer://<name></name>命名集群,如balancer://webapp - 每个
BalancerMember指定一个后端地址,支持 IP+端口或域名 -
ProxySet lbmethod=byrequests显式声明轮询算法(即使它是默认值,也建议写明) - 可选加
loadfactor设置权重,例如loadfactor=2表示该节点接收约两倍于loadfactor=1节点的请求数
示例配置片段:
ServerName app.example.com
ProxyRequests Off
BalancerMember http://192.168.1.10:8080 loadfactor=2
BalancerMember http://192.168.1.11:8080 loadfactor=1
ProxySet lbmethod=byrequests
ProxyPass / "balancer://webapp/"
ProxyPassReverse / "balancer://webapp/"
绑定路径并启用反向代理规则
通过 ProxyPass 和 ProxyPassReverse 将外部请求映射到集群:
-
ProxyPass /api/ balancer://webapp/表示所有以/api/开头的请求都转发给集群 -
ProxyPassReverse重写后端返回的Location、Set-Cookie等响应头,确保客户端无感知 - 建议加上
ProxyPreserveHost On,让后端能获取原始 Host 头 - 务必关闭正向代理:
ProxyRequests Off(安全必需)
可选但推荐:开启基础健康检查
默认情况下,mod_proxy_balancer 不主动探测后端是否存活。添加 status=+H 标记节点参与心跳检测,并配合简单探针提升可用性:
- 在
BalancerMember行末尾加status=+H,如:BalancerMember http://192.168.1.10:8080 status=+H - Apache 2.4.43+ 支持更细粒度控制,例如:
hcmethod=GET hcuri="/health" hcexpr="%{REQUEST_STATUS} == 200" - 未启用完整健康检查时,
status=+H仅作标记,不自动触发探测;若要真正生效,需额外配置ProxyHCExpr和ProxyHCTemplate


















