Nginx原生支持透传前端网关路由标识,但需开启underscores_in_headers on并用$http_x_route_tag等变量显式proxy_set_header,且必须置于proxy_pass之前。
不需要额外插件或模块,Nginx 原生就能通过
把
前端
网关的
路由
标识(比如灰度标签、区域分组、AB测试通道)安全、稳定地透传给后端服务。关键不在于“能不能”,而在于“怎么设才不被覆盖、不被忽略、不被中间层吃掉”。
为什么要透传路由标识,而不是让后端自己猜?
真实业务中,前端网关(如 Kong、APISIX 或自研网关)常在请求头注入类似
、
这样的标识,用于分流、限流、日志打标或配置加载。如果 Nginx 作为二级反向代理未显式透传,这些头默认不会到达后端——因为 Nginx 默认只保留标准头,且会忽略非标准命名(尤其含下划线)的自定义头。
必须打开下划线支持:underscores_in_headers on
Nginx 默认拒绝带下划线的请求头字段(如
),认为不合规。若不开启,这类头会被静默丢弃,后端完全收不到。
在
或
块顶部添加:
注意:该指令不能放在
内,只在
/
级生效
开启后,你才能用
、
这类变量取值
正确写法:用 $http_ 变量透传,且必须在
proxy
_pass 之前
透传不是“转发就行”,而是要主动提取并重设。Nginx 不会自动透传非标准头,必须显式声明。
面向设计的AXUI前端框架表单
面向设计的AXUI前端框架表单是一款包含表格、列表、弹窗等的AXUI前端框架表单下载。
下载
立即学习
“
前端免费学习笔记(深入)
”;
错误写法(无效):
—— 若没开
,
值为空
正确写法(推荐):
务必确保这两行在
指令之前;否则不生效
多个相同 header 设置时,仅最后一个生效,避免重复覆盖
进阶:动态拼接 + 安全兜底
有些场景需要增强标识可信度,比如防止客户端伪造
,可结合
做白名单校验,再透传:
在
块中定义映射:
在
中使用:
若原始值不在白名单中,
为空,后端收到的就是空字符串或缺失该头,避免脏数据污染
验证很简单:curl 加头请求,然后在后端打印所有请求头,或在 Nginx access_log 中加入
字段即可实时确认是否成功透传。
proxy_set_headerX-Route-Tag: gray-v2X-Region: shanghaiX-Route-Taghttpserverunderscores_in_headers on;locationhttpserver$http_x_route_tag$http_x_regionproxy_set_header X-Route-Tag $http_x_route_tag;underscores_in_headers$http_x_route_tagproxy_set_header X-Route-Tag $http_x_route_tag;
proxy_set_header X-Region $http_x_region;proxy_passX-Route-Tagmaphttpmap $http_x_route_tag $valid_route_tag {
default "";
"gray-v1" "gray-v1";
"gray-v2" "gray-v2";
"prod" "prod";
}locationproxy_set_header X-Route-Tag $valid_route_tag;$valid_route_tag$http_x_route_tag