apache通过mod_proxy和mod_proxy_balancer实现restful接口负载均衡,需加载核心模块、定义balancer组、配置proxypass映射/api路径,并可选启用健康检查、超时控制与会话保持。

Apache 本身不管理微服务注册与发现,但可以通过 mod_proxy 和 mod_proxy_balancer 把 HTTP 流量反向代理并分发到多个 Java 微服务实例上,实现对 Restful 接口的负载聚合。关键不是“自动发现服务”,而是把 Apache 当作一个可控、可配的边缘代理层。
启用必要模块并定义负载均衡组
确保以下模块已加载(Apache 2.4 推荐):
-
mod_proxy:提供基础代理能力 -
mod_proxy_http:支持 HTTP 协议转发 -
mod_proxy_balancer:提供负载均衡逻辑 -
mod_lbmethod_byrequests或mod_lbmethod_bybusyness:调度算法模块(必须显式加载) -
mod_slotmem_shm:共享内存支持,用于状态持久化
在 httpd.conf 或虚拟主机配置中添加:
<proxy balancer:>
BalancerMember http://192.168.1.20:8080 route=node1 loadfactor=2
BalancerMember http://192.168.1.21:8080 route=node2 loadfactor=1
BalancerMember http://192.168.1.22:8080 status=+H # 热备节点
</proxy>
其中 route 用于会话保持,status=+H 表示仅在其他节点全部失效时启用。
配置 Restful 接口统一入口与路径映射
用 ProxyPass 将外部请求聚合成单一路径,后端服务无需感知负载层:
ProxyPass /api/ balancer://restapi/ ProxyPassReverse /api/ balancer://restapi/
这样所有 GET /api/users、POST /api/orders 请求都会被分发到后端集群,客户端只跟 /api/ 交互。
若需保留原始 Host 头或处理重定向,加上:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
ProxyPreserveHost On ProxyRequests Off
保障接口稳定性:健康检查与超时控制
默认 Apache 不主动探测后端存活。建议启用主动健康检查(Apache 2.4.43+):
<proxy balancer:>
BalancerMember http://192.168.1.20:8080 hcmethod=GET hcinterval=10 hcfail=3 hcpass=2
...
</proxy>
含义:每 10 秒发一次 GET 请求到根路径(如 /health),连续失败 3 次下线,连续成功 2 次恢复。
同时设置合理超时,避免阻塞:
ProxyTimeout 30
<proxy balancer:>
BalancerMember http://192.168.1.20:8080 timeout=30 retry=60
</proxy>
timeout 是单次请求等待上限,retry 是故障节点恢复前的冷却时间(秒)。
可选增强:会话保持与请求粘性
Restful 接口通常无状态,但若某些服务依赖本地缓存或临时会话,可启用粘性:
- 后端返回
Set-Cookie: ROUTEID=...; path=/,Apache 自动识别并绑定路由 - 配置:
proxySet stickysession=ROUTEID|JSESSIONID nofailover=Off - 或用 URL 路径编码(需后端配合生成带
;jsessionid=的重定向)
注意:nofailover=Off 允许故障转移;设为 On 则强制绑定,适合强一致性场景。










