apache可作为轻量反向代理入口,需启用mod_proxy、mod_proxy_http/ajp、mod_proxy_balancer、lbmethod及slotmem_shm模块;按业务建balancer组,用proxypass映射路径并配置健康检查、超时与会话保持。

Apache 本身不替代服务注册中心或 API 网关,但它能作为轻量、稳定、可控的统一负载入口,把外部流量按路径精准分发到已知地址的后端微服务集群。核心是用 mod_proxy 和 mod_proxy_balancer 搭建反向代理层,而非实现服务发现或请求聚合。
必须启用的核心模块
缺一不可,否则配置无效或报错:
-
mod_proxy:提供基础代理框架 -
mod_proxy_http(HTTP/HTTPS 后端)或mod_proxy_ajp(Tomcat 场景):协议转发能力 -
mod_proxy_balancer:启用负载均衡逻辑(2.4+ 默认不加载) -
mod_lbmethod_byrequests或mod_lbmethod_bybusyness:调度算法模块,需显式加载 -
mod_slotmem_shm:共享内存支持,用于健康状态持久化
定义按业务划分的负载组
每个微服务域单独建一个 balancer:// 组,便于隔离与运维。例如用户服务集群:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=u1 loadfactor=2
BalancerMember http://192.168.1.11:8080 route=u2 loadfactor=1
BalancerMember http://192.168.1.12:8080 status=+D # 临时下线
ProxySet lbmethod=bybusyness
</proxy>
注意:balancer:// 前缀不能省略,否则退化为单点代理;route 参数为会话保持和健康检查提供标识。
配置路径映射与反向代理规则
用 ProxyPass 将外部路径统一接入后端集群,关键细节要对齐:
-
ProxyPass /api/users/ balancer://users-service/:开头和结尾的/都不能少,前者截断前缀,后者避免后端收到/api/users/xxx这类冗余路径 -
ProxyPassReverse /api/users/ balancer://users-service/:重写响应头中的Location、Set-Cookie等,保证重定向和 Cookie 正常 -
ProxyPreserveHost Off:默认关闭,防止后端误读原始 Host;多租户场景才设为On
保障高可用的关键增强项
生产环境不能依赖默认行为,需主动控制健康与超时:
- 健康检查(Apache 2.4.43+):
hcmethod=GET hcinterval=10 hcfail=3 hcpass=2,探测/health端点,失败自动隔离 - 超时控制:
ProxyTimeout 30全局设置,也可在BalancerMember中加timeout=30 retry=60 - 会话保持(如需):
stickysession=JSESSIONID|jsessionid,配合后端 Cookie 的Path=/设置










