servername 不参与灰度路由决策,仅划定配置作用域并匹配 host 头;基于 cookie 的灰度需靠 mod_rewrite 提取 http_cookie 并配合 mod_proxy 代理至不同后端。

ServerName 本身不参与灰度路由决策,它只用于匹配请求的 Host 头,不能直接读取或解析 Cookie。想实现“基于 Cookie 的灰度发布”,关键不是靠 ServerName,而是用 mod_rewrite 提取 Cookie 并配合 mod_proxy 显式代理到不同后端——ServerName 只是让这套逻辑在正确的虚拟主机里生效。
ServerName 的真实作用:划定灰度配置的作用域
多个灰度策略常共存于一台 Apache 服务器。比如:
-
app.example.com→ 主业务,需支持gray=canaryCookie 分流 -
admin.example.com→ 后台系统,走固定稳定集群,不启用灰度
这时,ServerName(配合 ServerAlias)确保灰度规则只对 app.example.com 生效,避免误影响其他域名。它像一道门禁,而不是分流阀。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
真正起作用的是 RewriteCond + HTTP_COOKIE
在对应 <virtualhost></virtualhost> 块中,写明 ServerName app.example.com 后,再配置以下逻辑:
- 用
RewriteCond %{HTTP_COOKIE} (?:^|;\s*)gray=(canary|v2)(?:;|$)捕获 Cookie 值 - 用
[E=GRAY_TARGET:%1]把值存为环境变量,供后续复用 - 再用
RewriteCond %{ENV:GRAY_TARGET} =canary判断,并通过RewriteRule ^/(.*)$ http://canary-svc:8080/$1 [P,L]代理 - 未匹配的请求,用
ProxyPass / http://stable-svc:8080/兜底
注意 Cookie 透传与响应头一致性
灰度流量经代理后,后端服务返回的 Set-Cookie 默认会带上原始域名(如 app.example.com)。若灰度后端部署在子路径或不同域名下,需同步修正:
- 加
ProxyPassReverseCookieDomain app.example.com app.example.com(保持不变) - 或
ProxyPassReverseCookiePath / /gray/(若灰度后端挂载在 /gray 路径) - 否则用户可能在灰度和稳定版本间反复跳转,失去会话一致性
不依赖 ServerName 的进阶场景
如果所有灰度都走同一个主域名(如全在 app.example.com 下),那 ServerName 就只是声明入口,实际分流完全由 Cookie 决定。此时还可叠加其他条件增强精准度:
- 限制仅对
/api/路径生效:RewriteRule ^/api/(.*)$ ... - 排除静态资源:
RewriteCond %{REQUEST_URI} !\.(js|css|png|jpg)$ [NC] - 结合 Header 验证(如内部测试流量带
X-Internal-Test: 1),避免外部伪造 Cookie










