apache本身不是专用负载均衡器,但通过mod_proxy和mod_proxy_balancer模块可构建稳定可控的反向代理型负载均衡系统;需启用mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_slotmem_shm等核心模块,配置定义集群、proxyset指定算法与参数、balancermember设置后端节点,并通过proxypass/proxypassreverse实现路径映射与响应头修正。
apache 本身不是专用负载均衡器,但通过 mod_proxy 和 mod_proxy_balancer 模块可构建稳定、可控的反向代理型负载均衡系统,适合中小规模 web 架构或与后端应用(如 tomcat、node.js、php-fpm)协同部署。
启用核心代理与均衡模块
确保以下模块已加载(通常位于 /etc/apache2/mods-enabled/ 或 conf/httpd.conf 中):
- mod_proxy.so —— 提供基础代理能力
- mod_proxy_http.so —— 支持 HTTP/HTTPS 后端通信
- mod_proxy_balancer.so —— 提供负载均衡逻辑与管理接口
- mod_slotmem_shm.so(推荐启用)—— 支持共享内存存储会话状态,保障 Balancer Manager 稳定性
Debian/Ubuntu 下执行:a2enmod proxy proxy_http proxy_balancer slotmem_shm;RHEL/CentOS 请确认 LoadModule 行未被注释。
定义后端服务器组与均衡策略
在虚拟主机或主配置中添加如下结构(以轮询 + 权重 + 故障转移为例):
<proxy>
BalancerMember http://192.168.1.10:8080 route=server1 loadfactor=3
BalancerMember http://192.168.1.11:8080 route=server2 loadfactor=2
BalancerMember http://192.168.1.12:8080 route=server3 status=+D
ProxySet lbmethod=byrequests
</proxy>
ProxyPass "/app" "balancer://myapp/"
ProxyPassReverse "/app" "balancer://myapp/"
说明:
-
lbmethod 可选
byrequests(默认)、bytraffic、bybusyness,后者需mod_slotmem_shm - loadfactor 控制分发权重(整数,越大承担请求越多)
-
status=+D 表示该节点禁用(
D= Disabled),可用H(Hot standby)、E(Error only)等组合 -
route 配合
sticky session使用(见下节)
实现会话保持(Sticky Session)
当后端应用依赖本地 Session(如 Java HttpSession),需将同一用户持续导向同一节点:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 后端应用需在响应中设置含
JSESSIONID或自定义 Cookie(如ROUTEID) - Apache 配置中启用
stickysession并指定 Cookie 名和路由分隔符:
ProxySet stickysession=ROUTEID|jsessionid scolonpathdelim=On
若后端返回 Set-Cookie: JSESSIONID=abc123.server1,Apache 将自动提取 server1 并绑定到对应 route 节点。注意:Cookie 值中必须包含与 route=xxx 完全一致的标识。
启用 Balancer Manager 图形化监控界面
便于实时查看节点状态、手动启停、调整权重:
<location>
SetHandler balancer-manager
Require ip 127.0.0.1 192.168.1.0/24
</location>
访问 http://your-apache/balancer-manager 即可操作。生产环境务必严格限制 IP 访问权限,禁用公网暴露。
不复杂但容易忽略:健康检查需配合后端探针(Apache 本身不主动探测,依赖失败请求触发 failonstatus 或 ping 参数);高并发场景建议启用 ProxyPreserveHost On 和 ProxyRequests Off 防止误配成正向代理。









