apache不支持自动分流黑盒能力,但可通过virtualhost+mod_rewrite+mod_proxy组合,基于域名与cookie/header等请求特征精准导流测试用户至灰度环境,核心是识别在前、代理在后、兜底可靠。

Apache 本身不支持“自动分流部分用户”这种黑盒能力,但通过 VirtualHost + mod_rewrite + mod_proxy 组合,完全可以基于域名+请求特征(如 Cookie、Header)把指定测试用户精准导流到灰度环境——关键在于“识别在前、代理在后、兜底可靠”。
1. 先建两个独立的 VirtualHost 域名入口
灰度测试必须有明确的入口标识,推荐用子域名隔离,例如:
-
主站域名:
www.example.com→ 指向稳定版后端(balancer://prod) -
灰度域名:
gray.example.com→ 专供测试人员访问,可配合 DNS 或 Hosts 临时指向
注意:两个 VirtualHost 必须共用同一 IP 和端口(如 *:80),靠 ServerName 区分,不能只靠路径。
2. 在灰度 VirtualHost 内做用户级条件分流
仅允许带特定标识的请求进入灰度后端,其余全部回落到稳定环境。比如用 Cookie 控制:
- 服务端给测试人员写入
gray=on(建议加Path=/; HttpOnly; Secure) - 在
gray.example.com的 VirtualHost 块中配置:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} (?:^|;\s*)gray=on(?:;|$) [NC]
RewriteRule ^/(.*)$ balancer://canary/ [P,L]
ProxyPass / balancer://prod/
ProxyPassReverse / balancer://prod/
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
说明:[P] 表示代理到灰度集群,[L] 阻止后续规则;未匹配灰度 Cookie 的请求,自然走最后的 ProxyPass 到稳定集群。
3. 定义两套后端集群(balancer://prod 与 balancer://canary)
必须提前声明,不能只在 ProxyPass 里隐式使用:
-
balancer://prod:含稳定版服务器,如http://192.168.1.10:8080 -
balancer://canary:含灰度版服务器,如http://192.168.1.20:8080
建议放在全局配置或 VirtualHost 外部,结构清晰便于 CI/CD 更新。每个 BalancerMember 可配 loadfactor 和健康检查参数,但灰度分流逻辑不依赖它。
4. 确保 DocumentRoot 不参与灰度逻辑
DocumentRoot 只用于静态资源或兜底响应,灰度流量必须绕过文件系统查找流程:
- 稳定版 VirtualHost 中可设
DocumentRoot "/var/www/stable/public",作为 fallback - 灰度 VirtualHost 中不要设 DocumentRoot,所有请求都由
RewriteRule或ProxyPass处理 - 避免把灰度代码放进 DocumentRoot 目录——环境混杂会导致权限错乱和发布风险










