Apache代理实现后端流量切分,核心是mod_proxy与mod_proxy_balancer配合路由规则完成识别、标记与分发,支持路径、Cookie、请求头/UID哈希三种分流方式,并需配置健康检查、上下文透传与日志区分以保障生效与可观测性。

Apache 代理实现后端流量切分,核心是用 mod_proxy 和 mod_proxy_balancer 搭配路由规则,在请求进入后端前完成识别、标记与分发。不依赖外部服务发现,适合已知地址的稳定后端集群,配置 reload 即生效,无需重启。
按请求路径分流(最常用)
适用于前端静态资源与后端 API 同域名部署场景,避免跨域问题。
- 在同一个
内,用或ProxyPass匹配路径前缀 -
ProxyPass /api/ http://backend-api:8080/→ 所有/api/xxx请求转发到 API 集群 -
DocumentRoot /var/www/frontend→ 其余请求(如/、/assets/)由 Apache 直接响应静态文件 - 注意顺序:路径更具体的规则要放在前面,避免被泛匹配覆盖
按 Cookie 值灰度切分
适合小范围灰度发布,比如让 gray=on 或 version=canary 的用户走新版本后端。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
mod_rewrite,用RewriteCond %{HTTP_COOKIE}提取目标 Cookie - 匹配成功后,用
RewriteRule ^/(.*)$ balancer://canary-backend/$1 [P,L]直接代理 - 默认流量走
ProxyPass / balancer://main-backend/ - 务必禁用粘性会话(注释掉
ProxySet stickysession=...),否则灰度用户会被固定住
按请求头或 UID 哈希分流
适合需要按用户维度稳定分配(如 5% 用户长期命中灰度)的场景。
- 从
X-User-ID或X-Forwarded-For中提取标识,用RewriteCond expr做哈希取模(如((%1 * 97) % 100) ) - 满足条件时,
ProxyPass / http://gray-backend/;否则走生产集群 - 两个后端可各自再套一层
balancer://做内部负载,但灰度决策必须在 rewrite 层完成 - Apache 不支持运行时计算哈希并动态选节点,所以不能把哈希逻辑放在
块里
关键配套设置不能少
光写路由不够,还要保障分流真实生效、可观测、可维护。
- 透传上下文:加
RequestHeader set X-Gray-Version "canary" env=IS_CANARY,让后端知道这是灰度请求 - 开启健康检查:为每个
BalancerMember加hcmethod=GET hcuri=/actuator/health hcinterval=10,避免打到故障节点 - 验证效果:访问
/balancer-manager(需授权),看灰度组的 “Current Requests” 是否随带对应 Cookie 或 Header 的请求实时上升 - 区分日志:启用
ProxyPreserveHost On,方便后端 access log 中还原原始 Host 和路径










