apache负载均衡必须加载mod_proxy.so、mod_proxy_balancer.so、mod_proxy_http.so和mod_slotmem_shm.so四个核心模块,缺一不可;再通过balancer://定义集群、balancermember添加节点,并配置proxypass与proxypassreverse实现反向代理及会话保持。
启用必要模块
apache 要做负载均衡,必须加载几个核心模块。缺一不可,否则启动会报错或功能失效:
- mod_proxy.so:提供基础代理能力
- mod_proxy_balancer.so:支持负载均衡器定义与管理
- mod_proxy_http.so:让 Apache 能正确转发 HTTP/HTTPS 请求(没它,ProxyPass 会失败)
- mod_slotmem_shm.so:为 balancer 提供共享内存支持(2.4+ 必需)
- 按需加载算法模块,例如 mod_lbmethod_byrequests.so(按请求数轮询,默认常用)
确认这些行在 httpd.conf 或 mods-enabled/ 下已取消注释。
定义后端服务器集群
用 balancer:// 协议名声明一个逻辑集群,再用 BalancerMember 加入真实后端节点:
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=server1
BalancerMember http://192.168.1.11:8080 route=server2
BalancerMember http://192.168.1.12:8080 status=+H # 热备节点,仅当其他故障时启用
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|PHPSESSID
ProxySet timeout=5
</proxy>
说明:
- route=xxx 配合 stickysession 实现会话保持(如 Java 应用用 JSESSIONID)
- status=+H 表示热备;status=+D 表示禁用;status=+E 表示强制下线
- timeout=5 是连接超时秒数,避免请求卡死
绑定路径并启用反向代理
把用户请求映射到集群,并确保响应头(如 Location、Set-Cookie)被正确重写:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/
# 可选:传递真实客户端 IP
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
ProxyPreserveHost On
关键点:
- ProxyPassReverse 必须和 ProxyPass 的路径完全一致,否则重定向会跳转到后端地址,暴露内网
- ProxyPreserveHost On 让后端看到原始 Host 头,对虚拟主机或多租户场景很重要
- 若后端需要识别真实 IP,请确保前端(如 Nginx 或 CDN)设置了 X-Forwarded-For,且 Apache 中配置了 RemoteIPHeader X-Forwarded-For 和 RemoteIPInternalProxy
验证与可选增强
配置完成后重启 Apache,访问 /balancer-manager(需额外授权)可实时查看节点状态、权重、请求计数等:
<location>
SetHandler balancer-manager
Require ip 127.0.0.1 192.168.1.0/24
</location>
进阶建议:
- 启用健康检查:Apache 2.4.43+ 可用 mod_proxy_hcheck,支持 HTTP HEAD/PING 自动探活
- 按流量分配:改用 lbmethod=bytraffic,适合大文件下载类服务
- 限制并发连接:在 BalancerMember 后加 max=20 防止单节点过载










