apache mod_proxy_balancer 需显式启用 mod_proxy、mod_proxy_http、mod_proxy_balancer、调度算法模块(如 lbmethod_byrequests)及可选 mod_status,配置 块定义集群、proxyset 指定算法、balancermember 设置后端节点,并通过 proxypass/proxypassreverse 实现路径映射与响应头修正。

Apache mod_proxy_balancer 不是开箱即用的负载均衡器,而是一个需明确启用、按需配置的模块组合。它本身不自动分发请求,必须配合 mod_proxy、mod_proxy_http 和对应调度算法模块(如 lbmethod_byrequests)才能真正工作。核心在于“模块到位 + 结构正确 + 算法显式指定”,缺一不可。
确认并启用必需模块
只加载 mod_proxy 是不够的——它只能做简单反向代理。要实现负载均衡,以下模块必须全部启用:
- mod_proxy:提供基础代理能力
- mod_proxy_http:支持 HTTP 协议转发(后端是 HTTP 服务时必需)
- mod_proxy_balancer:提供集群管理、状态跟踪和调度框架
- 调度算法模块:如 mod_lbmethod_byrequests(轮询)、mod_lbmethod_bytraffic(按流量)或 mod_lbmethod_bybusyness(按活跃连接数)
- mod_status(推荐):用于 /balancer-manager 界面及部分算法(如 bytraffic)依赖的状态采集
验证方式:httpd -M | grep -E 'proxy|lbmethod|status'。Ubuntu/Debian 可用 a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests status;RHEL/CentOS 需检查 /etc/httpd/conf.modules.d/00-proxy.conf 中对应 LoadModule 行未被注释。
定义负载均衡集群
用 <proxy></proxy> 块声明一个命名集群(如 balancer://myapp),并在其中列出后端节点和调度策略:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 每个
BalancerMember指定后端地址,可加route=xxx(用于会话保持)、loadfactor=N(权重)、ping=5(主动探测间隔秒数)、retry=60(故障后恢复等待秒数) -
ProxySet lbmethod=byrequests必须写在之前,作用于整个集群;不能写在 BalancerMember 行内 - 若需热备节点,用
status=+H标记,仅当其他节点全部失效时启用
示例:
BalancerMember http://192.168.1.10:8080 route=node1 loadfactor=3 ping=5 retry=60
BalancerMember http://192.168.1.11:8080 route=node2 loadfactor=1 ping=5 retry=60
ProxySet lbmethod=byrequests
配置代理规则与路径映射
使用 ProxyPass 和 ProxyPassReverse 完成请求转发与响应头修正:
-
ProxyPass "/api/" "balancer://myapp/"→ 把/api/hello改写为/hello发往后端 -
ProxyPass "/api" "balancer://myapp/"(末尾无 /)→ 把/api/hello发成/api/hello,易导致 404 -
ProxyPassReverse必须配对使用,否则重定向响应中的Location头会暴露内部地址 - 建议关闭正向代理:
ProxyRequests Off,避免被滥用为开放代理
启用会话保持与健康检查
生产环境通常需要保障用户连续性和系统韧性:
- 会话保持:后端返回含
ROUTEID或JSESSIONID的 Cookie 时,在<proxy></proxy>块中加ProxySet stickysession=ROUTEID|JSESSIONID,并确保每个BalancerMember有对应route - 主动健康检查(Apache 2.4.43+):用
hcmethod=GET hcuri="/health" hcexpr="%{REQUEST_STATUS} == 200",比被动失败检测更及时 - 管理界面:启用
mod_status后,配置<location> Require ip 192.168.1.0/24 </location>,即可访问可视化面板









