Apache反向代理配合后端集群的核心是使用mod_proxy_balancer模块构建负载均衡器,将请求按策略分发至多个后端节点,并通过ProxySet配置lbmethod、stickysession和failonstatus等参数保障会话一致性与服务可用性。

Apache 反向代理配合后端集群,核心是用 mod_proxy_balancer 模块构建负载均衡器,把请求按策略分发到多个后端节点(如多个 Tomcat、Node.js 或 Java 实例),同时保障会话一致性和服务可用性。配置不难,但关键细节必须到位。
启用必要模块
集群依赖比普通反向代理更多模块,缺一不可:
-
mod_proxy:代理基础能力 -
mod_proxy_http:支持 HTTP 协议转发 -
mod_proxy_balancer:提供负载均衡逻辑(含健康检查、权重、算法) -
mod_lbmethod_byrequests(或bytraffic/bybusyness):指定调度算法 -
mod_rewrite(可选但推荐):用于路径重写或条件路由 -
mod_headers(可选):用于透传真实 IP 或设置响应头
Linux 下常用启用方式:
Ubuntu/Debian:sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests headers rewrite
RHEL/CentOS:确认 httpd.conf 中已取消注释对应 LoadModule 行,例如:LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
定义后端集群与成员
在 VirtualHost 或独立配置文件(如 httpd-vhosts.conf)中声明集群:
<Proxy balancer://myapp>
BalancerMember http://192.168.1.10:8080 route=node1 loadfactor=3 timeout=5 retry=30
BalancerMember http://192.168.1.11:8080 route=node2 loadfactor=2 timeout=5 retry=30
BalancerMember http://192.168.1.12:8080 status=+D # 临时禁用该节点(D=disabled)
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|PHPSESSID|connect.sid
ProxySet failonstatus=500,502,503,504
</Proxy>说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
route值需与后端应用的会话路由标识匹配(如 Tomcat 的jvmRoute、Express 的connect.sid) -
loadfactor控制流量分配比例(如 3:2 表示 node1 承担 60% 请求) -
retry是故障节点恢复检查间隔(秒),timeout是连接超时(秒) -
failonstatus定义哪些 HTTP 状态码触发节点下线
绑定代理路径并启用会话粘性
将请求路径映射到集群,并确保用户会话不跨节点漂移:
<VirtualHost *:80>
ServerName app.example.com
ProxyPreserveHost On
<pre class='brush:php;toolbar:false;'># 静态资源由 Apache 直接服务,不走集群
ProxyPass /static !
ProxyPass /favicon.ico !
# 动态请求交由集群处理
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/
# 可选:记录真实客户端 IP
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1</VirtualHost>
注意:ProxyPass /static ! 必须写在 ProxyPass / 之前,否则会被覆盖;stickysession 在 ProxySet 中已声明,无需额外配置 cookie 重写。
监控与运维支持
Apache 自带负载均衡管理界面,启用后可通过浏览器查看节点状态、手动启停、调整权重:
- 在配置中加入:
<Location "/balancer-manager"><br> SetHandler balancer-manager<br> Require ip 192.168.1.0/24 # 限制访问来源<br></Location>
- 重启 Apache 后访问
http://your-server/balancer-manager即可操作 - 建议搭配日志分析(如
%{BALANCER_WORKER_ROUTE}e记录实际路由节点)定位问题

















