apache通过mod_proxy和mod_proxy_balancer实现负载均衡,需启用相关模块,定义balancer://集群并配置balancermember,结合proxypass将路径代理至集群,设置stickysession和lbmethod保障会话粘滞与请求分发,同时配置proxypassreverse修正重定向头。

用 Apache 的 ProxyPass 将 URL 路径代理到 Tomcat 集群,核心是结合 mod_proxy 和 mod_proxy_balancer 模块,实现负载均衡式反向代理。关键不是单写一条 ProxyPass,而是先定义后端集群(Balancer),再把路径指向它。
启用必要模块
确保 Apache 已加载以下模块(通常在 httpd.conf 或 mods-enabled/ 下):
mod_proxy.somod_proxy_http.somod_proxy_balancer.so-
mod_lbmethod_byrequests.so(或其他调度算法模块,如bytraffic、heartbeat)
定义 Tomcat 集群(Balancer)
在 httpd.conf 或虚拟主机配置中添加:
<proxy>
BalancerMember http://192.168.1.10:8080 route=server1 loadfactor=1
BalancerMember http://192.168.1.11:8080 route=server2 loadfactor=1
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|jsessionid
</proxy>
说明:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
route=xxx需与各 Tomcat 的server.xml中<engine></engine>的jvmRoute属性一致(例如:<engine name="Catalina" defaulthost="localhost" jvmroute="server1"></engine>),用于会话粘滞 -
stickysession值设为JSESSIONID(或兼容大小写形式),确保同一用户请求始终落到同一 Tomcat 实例 -
lbmethod=byrequests表示按请求数轮询;也可用bytraffic(按流量)或heartbeat(需额外健康检查配置)
绑定路径到集群
在虚拟主机或目录上下文中配置代理规则:
ProxyPass "/app" "balancer://tomcat-cluster/app" ProxyPassReverse "/app" "balancer://tomcat-cluster/app"
注意:
- 路径末尾斜杠必须一致:若后端 Tomcat 应用部署在根路径(
/),则写"balancer://tomcat-cluster/";若部署在/myapp,则写"balancer://tomcat-cluster/myapp" -
ProxyPassReverse必须同步配置,否则 Tomcat 返回的重定向响应头(如Location)中的路径会被 Apache 错误改写 - 如需排除某些子路径(如静态资源),可提前用
ProxyPass !排除
可选:启用健康检查与管理界面
加入以下配置可启用运行时状态监控和自动故障剔除:
<location>
SetHandler balancer-manager
Require local
# 或按需放开访问权限(如 Require ip 192.168.1.0/24)
</location>
重启 Apache 后,访问 http://your-apache/balancer-manager 可查看节点状态、手动启停成员、调整权重等。










