Apache可作为轻量边缘代理实现Java微服务负载均衡,需启用mod_proxy、mod_proxy_http、mod_proxy_balancer三模块,配置balancer组、健康检查及ProxyPass路由。

Apache 本身不管理服务发现,但能作为轻量、可控的边缘代理,把流量统一分发到已知地址的 Java 微服务实例。关键不是替代网关,而是配好路由、健康检查和会话控制。
启用核心模块并确认加载
必须启用三个基础模块:mod_proxy(代理基础)、mod_proxy_http(HTTP 转发)、mod_proxy_balancer(负载逻辑)。在配置中检查是否已加载:
- Debian/Ubuntu:运行
a2enmod proxy proxy_http proxy_balancer后重启 Apache - RHEL/CentOS:确认
/etc/httpd/conf.modules.d/00-proxy.conf中对应LoadModule行未被注释 - 验证命令:
httpd -M | grep proxy应显示三者状态为shared
定义 balancer 组并设置分发策略
用 balancer:// 协议声明逻辑集群,每个 BalancerMember 对应一个微服务实例。示例配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<Proxy balancer://orderservice> BalancerMember http://10.0.1.10:8080 route=svc-a loadfactor=2 ping=5 BalancerMember http://10.0.1.11:8080 route=svc-b loadfactor=1 ping=5 status=+H ProxySet lbmethod=bybusyness </Proxy>
-
loadfactor控制权重,比如高配节点设为 2,低配为 1 -
ping=5表示每 5 秒做一次 TCP 连通性探测 -
status=+H标记为热备节点,仅当其他成员全部失效时才启用 -
lbmethod=bybusyness按当前活跃连接数调度,适合响应时间差异大的场景
绑定路径并启用健康转发
通过 ProxyPass 把外部请求映射到均衡组,同时确保重定向和 Cookie 正确回传:
ProxyPass /order/ balancer://orderservice/ ProxyPassReverse /order/ balancer://orderservice/ ProxyPreserveHost On
- 客户端只访问
/order/users,后端实际由集群处理 -
ProxyPreserveHost On保留原始 Host 头,便于后端日志或鉴权识别 - 避免写成
ProxyPass / http://xxx,否则退化为单点代理,失去负载能力
添加主动健康检查与可观测入口
默认不探测后端存活,需显式配置防止请求打到宕机节点:
- Apache 2.4.43+ 可用
hcmethod=GET hcinterval=10 hcfail=3 hcpass=2,定期调用/health接口判断状态 - 开启
/balancer-manager(仅限内网),实时查看各成员的“Elected”次数、“Current Requests”和状态 - 建议后端统一返回
X-Service-Id响应头,用curl -sI https://domain/order/status验证分发结果

















