apache可通过mod_proxy与mod_proxy_balancer构建高可用反向代理负载均衡器,关键在于启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests、status模块,配置带ping/retry的balancermember、proxypass路径映射、stickysession会话保持及/balancer-manager管理界面。

Apache 本身不是专用负载均衡器,但通过 mod_proxy 和 mod_proxy_balancer 模块组合,完全可以构建一个稳定、可监控、具备故障自动恢复能力的高可用反向代理负载均衡器。关键不在于组件多高级,而在于模块启用、健康检查、会话保持和管理界面这四个环节是否配置到位。
启用核心模块并验证加载
缺一不可的模块有:mod_proxy(代理基础)、mod_proxy_http(HTTP协议支持)、mod_proxy_balancer(负载均衡逻辑)、mod_lbmethod_byrequests(或 bytraffic、bybusyness,用于调度算法)、mod_status(状态页支持)。在 Debian/Ubuntu 系统中运行:
a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests statussystemctl restart apache2- 执行
apache2ctl -M | grep proxy确认所有模块已列出
定义带健康检查的负载均衡集群
仅写 BalancerMember 不够,必须加入存活探测与容错参数。例如:
<proxy>
ProxySet lbmethod=byrequests
BalancerMember http://192.168.1.10:8080 loadfactor=3 ping=5 retry=60
BalancerMember http://192.168.1.11:8080 loadfactor=2 ping=5 retry=60
BalancerMember http://192.168.1.12:8080 status=+H
</proxy>
说明:
-
ping=5表示每 5 秒向后端发 HEAD 请求探测; -
retry=60指故障节点在 60 秒后才重新纳入调度; -
status=+H将该节点设为热备(Hot Standby),只在其他节点全部失效时启用; -
loadfactor实现权重分发,适合硬件性能不均的场景。
配置代理规则与会话保持
使用 ProxyPass 和 ProxyPassReverse 完成路径转发,并启用粘性会话防止登录态丢失:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
ProxyPass "/api" "balancer://appcluster/api" ProxyPassReverse "/api" "balancer://appcluster/api" <p><proxy> ProxySet stickysession=ROUTEID|JSESSIONID </proxy></p>
注意:
- 若后端用 Tomcat,通常 session ID 是
JSESSIONID; - 若自定义路由标识(如通过 cookie
ROUTEID),需确保后端应用在首次响应中写入该 cookie 并带上Path=/和HttpOnly; -
stickysession必须配合每个BalancerMember的route参数使用,例如BalancerMember ... route=node1。
开启 balancer-manager 管理界面
这是实现“高可用运维”的关键入口,允许实时查看节点状态、手动启停、强制踢出异常节点:
<location>
SetHandler balancer-manager
Require local
# 生产环境务必限制 IP,例如:Require ip 192.168.1.0/24
</location>
访问 http://your-apache-host/balancer-manager 即可看到图形化状态页,各节点显示 Ok、Err 或 Dis(禁用),点击操作按钮可即时干预。
不复杂但容易忽略:健康检查依赖后端正确返回 HTTP 2xx 响应;若后端返回 503 或超时,Apache 会自动标记为失败并触发 retry 机制。只要模块启用正确、ping 参数合理、manager 可控,这个 Apache 负载层就能长期稳定运行。










