apache mod_proxy需配合mod_proxy_balancer及lbmethod_byrequests等模块才能构建集群,仅启用mod_proxy仅支持单点代理;必须启用proxy、协议模块、balancer、调度模块和status模块,并通过定义集群、balancermember配置节点参数,再用proxypass映射路径。
apache mod_proxy 本身不自带集群功能,必须配合 mod_proxy_balancer 和调度算法模块(如 lbmethod_byrequests)才能组成可用的后端服务器集群。关键不是“加几个地址”,而是模块齐备、结构正确、策略明确。
确保必需模块已启用
缺一不可,仅启用 mod_proxy 只能做单点反向代理,无法形成集群:
-
mod_proxy:提供基础代理能力 -
mod_proxy_http(HTTP 后端)或mod_proxy_ajp(Tomcat/JBoss):协议转发支持 -
mod_proxy_balancer:集群管理与状态跟踪核心 -
mod_lbmethod_byrequests(或其他调度模块):显式指定负载策略 -
mod_status(推荐):用于健康检查和/balancer-manager界面
验证命令:httpd -M | grep -E 'proxy|lbmethod|status'。Ubuntu/Debian 可用 a2enmod 批量启用;RHEL/CentOS 需检查 /etc/httpd/conf.modules.d/00-proxy.conf 中对应 LoadModule 行未被注释。
定义集群并配置后端节点
使用 <proxy></proxy> 块声明命名集群(如 balancer://api-cluster),每个 BalancerMember 指定一个后端地址,并可附加关键参数:
-
route=node1:用于会话保持(需后端配合jvmRoute或ROUTEID) -
loadfactor=2:权重分配,值越大分得请求越多 -
ping=5:每 5 秒主动探测后端连通性,避免转发失败请求 -
retry=60:节点故障后等待 60 秒再尝试恢复接入 -
status=+H:标记为热备节点,仅当其他节点全失效时启用
示例配置:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<proxy balancer:> BalancerMember http://192.168.1.10:8080 route=node1 loadfactor=2 ping=5 retry=60 BalancerMember http://192.168.1.11:8080 route=node2 loadfactor=1 ping=5 retry=60 ProxySet lbmethod=byrequests ProxySet stickysession=ROUTEID </proxy>
绑定路径并启用代理规则
通过 ProxyPass 和 ProxyPassReverse 将请求路径映射到集群,注意斜杠一致性与语义截断:
-
ProxyPass /api/ balancer://api-cluster/:把/api/users转发为/users到后端(前缀/api/被剥离) -
ProxyPassReverse /api/ balancer://api-cluster/:修正响应头中的Location、Set-Cookie等路径 -
ProxyPreserveHost Off(推荐):防止后端误读原始 Host;多租户场景需设为On并配ProxyPassReverse
完整虚拟主机片段示例:
<virtualhost> ServerName api.example.com ProxyPreserveHost Off ProxyPass /api/ balancer://api-cluster/ ProxyPassReverse /api/ balancer://api-cluster/ </virtualhost>
启用健康检查与运行时管理
开放 /balancer-manager 界面便于实时查看节点状态、手动下线/上线节点:
- 在配置中加入
<location></location>块,限制访问来源(如仅内网 IP) - 确保
mod_status已启用,否则部分健康指标不可见 - 若需自动剔除异常节点,依赖
ping参数 +retry+status组合,无需额外脚本
配置片段示例:
<location> SetHandler balancer-manager Require ip 192.168.1.0/24 </location>










