nginx灰度路由需在location块中proxy_pass前设置proxy_set_header x-gray-tag,支持透传客户端头或固定值;含下划线的头需启用underscores_in_headers on;该方式与路径解耦,便于动态分流。

直接在 location 块中用 proxy_set_header 设置灰度标签头即可,关键是位置要对、值要可控、避免被覆盖。
指定 header 名称与值
灰度标签通常以自定义请求头形式传递,比如 X-Gray-Tag。后端据此做路由或特征识别:
- 写法示例:
proxy_set_header X-Gray-Tag $http_x_gray_tag; - 这表示:若客户端带了
X-Gray-Tag: v2,Nginx 就原样透传给后端 - 也支持固定值,如
proxy_set_header X-Gray-Tag "v2";(适用于全量切流)
确保配置位置正确
该指令必须出现在 proxy_pass 之前,否则不生效:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- ✅ 正确顺序:
proxy_set_header→proxy_pass - ❌ 错误顺序:
proxy_pass→proxy_set_header(会被忽略) - 同一 location 内多次设置同名 header,仅最后一条生效,需避免重复覆盖
处理含下划线的 header 名
如果灰度头名含下划线(如 X_Gray_Tag),默认会被 Nginx 丢弃:
- 需在
http或server块中启用:underscores_in_headers on; - 同时确认没有在上级作用域设为
off,否则静默失效 - 建议统一使用短横线命名(
X-Gray-Tag),更兼容、无需额外配置
配合路径无关的灰度逻辑
这种 header 透传方式天然与 URL 路径解耦,适合灵活策略:
- 内部测试人员可手动加头,走同一
/api/路径命中灰度后端 - 网关层可基于用户身份、设备类型等动态注入
X-Gray-Tag - 后端无需改路径规则,只读 header 即可分流,升级平滑










