apache反向代理集群核心是mod_proxy与mod_proxy_balancer协同实现负载分发、会话粘性(stickysession)、健康检查及故障转移;需启用proxy_module、proxy_http_module、proxy_balancer_module等模块,配置balancermember权重与route,并通过proxypass路由至balancer://集群。

Apache 反向代理配合集群节点,核心是用 mod_proxy 和 mod_proxy_balancer 模块把请求分发到多个后端服务实例,同时保持会话一致性、健康检查和故障转移能力。关键不在“加几台机器”,而在于代理逻辑是否健壮、路由是否可控、状态是否可观察。
启用必要模块
确保以下模块已加载(CentOS/RHEL 通常需确认,Ubuntu/Debian 可用 a2enmod):
-
proxy_module(基础代理支持) -
proxy_http_module(HTTP 协议代理) -
proxy_balancer_module(负载均衡调度核心) -
lbmethod_byrequests或lbmethod_bytraffic(负载算法模块,常随mod_proxy_balancer自动安装) -
headers_module(用于透传真实客户端 IP,如X-Forwarded-For)
在 /etc/httpd/conf/httpd.conf 或对应模块配置中取消注释,或通过命令启用(如 CentOS 8+):
sudo dnf install httpd-mod_proxy_balancer<br>sudo systemctl restart httpd
定义后端集群(balancer://)
在虚拟主机或独立配置文件(如 /etc/httpd/conf.d/cluster.conf)中声明一个命名集群:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<proxy balancer:><br> BalancerMember http://192.168.3.119:8080 route=node1 loadfactor=2<br> BalancerMember http://192.168.3.116:8080 route=node2 loadfactor=1<br> BalancerMember http://192.168.3.120:8080 status=+H # 热备节点<br> ProxySet lbmethod=byrequests<br> ProxySet stickysession=JSESSIONID|PHPSESSID<br> ProxySet nofailover=Off<br></proxy>
说明:
-
route=值需与后端应用(如 Tomcat 的jvmRoute或 EKP 的cluster.session.balancerRoute)严格一致,才能实现会话粘性 -
loadfactor控制权重,数值越大承担请求越多 -
status=+H表示该节点为热备,仅在其他节点失效时启用 -
nofailover=Off允许会话在节点宕机后迁移(若应用支持 session 复制)
绑定代理规则与路径处理
将请求路由到上述集群,并处理常见需求:
<virtualhost><br> ServerName app.example.com<br> ProxyPreserveHost On<br><br> # 静态资源不走集群,由 Apache 直接服务<br> ProxyPass /static !<br> ProxyPass /images !<br> DocumentRoot /var/www/app-static<br><br> # 动态请求全部交给集群<br> ProxyPass / balancer://myapp/<br> ProxyPassReverse / balancer://myapp/<br><br> # 透传客户端真实 IP<br> RequestHeader set X-Forwarded-Proto "http"<br> ProxyAddHeaders Off<br> Header edit Set-Cookie "(.*)$" "$1; Path=/"<br></virtualhost>
注意点:
-
ProxyPass /static !必须写在ProxyPass /之前,Apache 按顺序匹配,否则会被通配覆盖 -
ProxyPreserveHost On让后端看到原始 Host 头,对多租户或虚拟主机识别很重要 - 如需 HTTPS 卸载,应在
VirtualHost *:443中配置 SSL,并把ProxyPass指向http://后端(避免内网再加密)
验证与运维要点
配置完成后不是结束,而是观察起点:
- 语法检查:
sudo apachectl configtest(CentOS)或sudo apache2ctl configtest(Debian) - 查看集群状态页(需启用
mod_status并授权):http://app.example.com/balancer-manager,可手动下线节点、调整权重、查看响应时间 - 日志中关注
[proxy:debug]级别输出(临时开启),排查转发失败或 503 原因 - 后端应用需适配:Tomcat 要配
jvmRoute;Spring Boot 若用spring.session.jdbc或 Redis,可关闭 sticky session 依赖










