apache负载均衡核心是启用mod_proxy、mod_proxy_http、mod_proxy_balancer、算法模块及mod_slotmem_shm,再通过定义集群、balancermember声明节点、proxyset设定策略(如lbmethod=bybusyness)、proxypass转发请求,并可选配置balancer-manager与健康检查。

Apache 中管理后端服务器负载均衡,核心是用 <proxy></proxy> 定义集群,并通过 BalancerMember 声明每个后端节点。配置不是写死的,而是按需组合的模板化结构——关键在于模块启用、集群定义、调度策略和转发规则四部分协同工作。
必须启用的基础模块
缺一不可,否则配置不生效:
-
mod_proxy:代理功能基础 -
mod_proxy_http:支持 HTTP/HTTPS 协议转发 -
mod_proxy_balancer:负载均衡调度核心 -
mod_lbmethod_byrequests(或bytraffic、bybusyness):选择一种调度算法模块 -
mod_slotmem_shm:提供共享内存支持,用于健康检查和 balancer-manager 状态页(生产环境建议保留)
Ubuntu/Debian 下执行:sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests slotmem_shm
CentOS/RHEL 需确认对应 .so 文件已加载,路径通常为 /usr/lib64/httpd/modules/。
标准集群配置模板
放在 <virtualhost></virtualhost> 内或独立 .conf 文件中(如 /etc/apache2/sites-available/lb.conf):
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<proxy>
BalancerMember "http://192.168.1.10:8080" loadfactor=3 route=node1 timeout=15
BalancerMember "http://192.168.1.11:8080" loadfactor=2 route=node2 timeout=15
BalancerMember "http://192.168.1.12:8080" status=+H
ProxySet lbmethod=bybusyness
ProxySet stickysession=JSESSIONID|PHPSESSID
ProxySet maxattempts=3
</proxy>
ProxyPass "/" "balancer://myapp/"
ProxyPassReverse "/" "balancer://myapp/"
说明:
-
loadfactor按性能差异分配权重,比如 CPU 更强的机器设为 3,普通机器设为 2 -
status=+H表示热备节点,仅在其他节点全部失效时启用 -
lbmethod=bybusyness推荐用于动态负载场景,比轮询更公平 -
stickysession支持多种会话标识,用竖线分隔可兼容不同后端语言
可选但实用的增强配置
让负载均衡更可控、可观测:
-
启用 balancer-manager 状态页(调试/运维用):
<location><br> SetHandler balancer-manager<br> Require ip 127.0.0.1 192.168.1.0/24<br></location>
访问http://your-domain/balancer-status可实时查看各节点状态、请求计数、失败次数等 -
健康检查细化:添加
ping=5(单位秒)让 Apache 每 5 秒发一个 HEAD 请求探测存活;failonstatus=500,503可自定义判定故障的响应码 -
路径级分流:不同 URL 路由到不同集群,例如:
ProxyPass "/api" "balancer://api-cluster/"ProxyPass "/static" "balancer://cdn-cluster/"
验证与生效要点
配置完成后别直接重启:
- 先运行
sudo apache2ctl configtest(Debian/Ubuntu)或sudo httpd -t(RHEL/CentOS)检查语法 - 确认后端服务能被 Apache 进程访问(注意防火墙、SELinux、网络连通性)
- 重启服务:
sudo systemctl restart apache2或sudo systemctl restart httpd - 用 curl 多次请求,观察后端日志或响应头中的
X-Forwarded-For和自定义标识,确认流量是否真实分发










