apache本身不自动发现微服务,但可通过mod_proxy、mod_proxy_http、mod_proxy_balancer等模块实现可控负载均衡:需启用全部核心模块,定义balancer集群并配置loadfactor、route、status=+h,结合hcmethod=get等健康检查及proxypass路径映射,确保请求稳定分发与故障自动恢复。

Apache 本身不自动发现微服务,但能用 mod_proxy 和 mod_proxy_balancer 把请求分发到多个后端实例上,实现稳定、可控的负载均衡。核心是配好模块、定义集群、映射路径,并加上健康检查和超时控制。
确认并启用必要模块
只开 mod_proxy 不够,mod_proxy_balancer 才是负载均衡的关键。缺一不可:
-
mod_proxy:提供基础代理能力 -
mod_proxy_http:支持 HTTP 协议转发 -
mod_proxy_balancer:实现节点调度与状态管理 -
mod_lbmethod_bybusyness(推荐)或byrequests:指定分发算法 -
mod_status:启用/balancer-manager管理界面所必需
在 Ubuntu/Debian 上运行:a2enmod proxy proxy_http proxy_balancer lbmethod_bybusyness status
RHEL/CentOS 则检查 /etc/httpd/conf.modules.d/00-proxy.conf 是否加载对应 LoadModule 行。改完重启 Apache。
定义负载均衡集群
用 <proxy></proxy> 块声明一个集群,比如叫 balancer://api,每个后端节点用 BalancerMember 加入:
-
loadfactor=2:该节点接收两倍于默认权重的流量 -
route=node1:配合会话保持使用(如后端返回JSESSIONID=xxx.node1) -
status=+H:标记为启用健康检查(需配合hcmethod等参数才真正生效) -
ping=5:连接前先发一个 HEAD 请求探活,5 秒超时(旧版常用)
示例配置:
<proxy>
BalancerMember http://192.168.1.10:8080 loadfactor=3 route=app1 hcmethod=GET hcinterval=10 hcfail=3 hcpass=2
BalancerMember http://192.168.1.11:8080 loadfactor=1 route=app2 hcmethod=GET hcinterval=10 hcfail=3 hcpass=2
ProxySet lbmethod=bybusyness
</proxy>
其中 bybusyness 会优先把请求发给当前活跃连接更少的节点,比单纯按请求数更贴合实际负载。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
配置统一入口与反向代理规则
让客户端只访问 /api/,所有请求由 Apache 自动分发到后端集群:
-
ProxyPass /api/ balancer://api/:把路径映射过去 -
ProxyPassReverse /api/ balancer://api/:重写后端返回的Location、Set-Cookie等响应头,避免跳转出错 -
ProxyPreserveHost On:把原始Host头传给后端,方便日志或路由识别 -
ProxyRequests Off:禁用正向代理,仅保留反向代理功能,提升安全性
这些指令通常放在 <virtualhost></virtualhost> 或主配置中,不要遗漏 ProxyPassReverse,否则重定向可能指向内部地址。
启用健康检查与故障恢复
默认 Apache 不主动探测后端是否存活。要实现自动摘除和恢复,必须显式配置健康检查:
-
hcmethod=GET:对每个节点根路径(如/health)发 GET 请求 -
hcinterval=10:每 10 秒检查一次 -
hcfail=3:连续失败 3 次,标记为DOWN -
hcpass=2:连续成功 2 次,恢复为OK -
retry=60:节点被标记为 DOWN 后,60 秒内不再尝试,之后自动重试
同时设置全局超时防阻塞:ProxyTimeout 30 —— 所有代理请求等待后端响应最长 30 秒Timeout 60 —— 整个请求生命周期上限(含 DNS、连接、读取)









