Apache可通过mod_proxy_balancer、健康探测、/balancer-manager界面及合理调度策略构建生产级高可用反向代理集群,需启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests、slotmem_shm和headers模块,配置带ping/retry/status的BalancerMember集群,暴露受IP限制的/balancer-manager界面,并通过ProxyPass/ProxyPassReverse完成路径映射与X-Forwarded头透传。
apache mod_proxy 本身不自带“高可用集群”自动故障转移能力,但通过 mod_proxy_balancer + 健康探测 + 管理界面 + 合理调度策略,可以构建生产级高可用反向代理集群。关键不是追求全自动容灾,而是让故障可感知、可隔离、可人工干预,同时保证流量不中断。
必须启用的核心模块
缺一不可,否则集群无法启动或行为异常:
- proxy_module:基础代理引擎,所有代理功能的底层支撑
- proxy_http_module(HTTP后端)或 proxy_ajp_module(AJP后端):决定通信协议,Tomcat/JBoss 推荐 AJP;普通 HTTP 服务用 proxy_http
- proxy_balancer_module:提供集群管理框架、状态存储和调度入口
-
lbmethod_byrequests(或 bytraffic/bybusyness):指定负载算法,
byrequests最常用且稳定 -
slotmem_shm_module:共享内存模块,
balancer-manager和健康检查依赖它,漏启会导致 500 错误 -
headers_module:用于透传
X-Forwarded-*头,保障后端真实上下文
验证方式:httpd -M | grep -E 'proxy|lbmethod|slotmem',看到对应模块标记为 (shared) 即生效。
定义带健康检查的集群
集群需在主配置(如 httpd.conf)或 <ifmodule proxy_balancer_module></ifmodule> 块中声明,不能写在虚拟主机内:
<Proxy balancer://myapi>
BalancerMember http://192.168.10.11:8080 route=node1 loadfactor=2 ping=5 retry=60
BalancerMember http://192.168.10.12:8080 route=node2 loadfactor=2 ping=5 retry=60
BalancerMember http://192.168.10.13:8080 status=+H # 热备节点,仅当其他全宕时启用
ProxySet lbmethod=byrequests
ProxySet timeout=10
</Proxy>说明:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
ping=5:每 5 秒向后端发 HEAD 请求探测存活(HTTP)或 AJP PING(AJP) -
retry=60:节点失败后,60 秒内不再转发请求,避免雪崩 -
status=+H:标记为热备(hot standby),默认不参与轮询 -
route=node1:配合stickysession=JSESSIONID实现会话保持(适用于 Tomcat)
暴露并保护 /balancer-manager 界面
这不是集群本身,而是运维高可用的关键入口:
<Location "/balancer-manager">
SetHandler balancer-manager
Require ip 192.168.1.100 # 严格限制访问 IP,禁用 Require local 生产环境
Require ip 192.168.1.101
</Location>重启后访问 http://your-server/balancer-manager 可实时查看:
- 各节点当前连接数、已处理请求数、响应时间
- 手动启停某节点(临时维护)、切换调度算法
- 设置某节点为
Drain(排空模式),待当前请求完成再下线 - 查看最近一次健康检查结果(Success/Failed)
关联集群到业务路径并透传关键头
在 <VirtualHost> 中完成最终路由与语义修正:
ProxyPreserveHost On
ProxyRequests Off
<h1>路径映射:/api/ → 后端收到 /,避免路径错位</h1><p>ProxyPass /api/ balancer://myapi/
ProxyPassReverse /api/ balancer://myapi/</p><h1>强制注入客户端真实 IP 和协议,后端需读取这些头</h1><p>RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" early
RequestHeader set X-Forwarded-Proto "https" early
RequestHeader set X-Forwarded-Port "443" early注意:
-
/api/末尾斜杠必须一致,否则/api/users会被转发成/api/users(而非/users),导致 404 -
ProxyPreserveHost On对多租户或 Spring Boot 应用至关重要,防止重定向生成内部地址 - 若 Apache 终止 TLS,
X-Forwarded-Proto必须设为https,否则后端 HTTPS 判断失效

















