proxy_set_header 是 nginx 反向代理中透传认证凭据与校验信息的关键机制,支持透传 authorization 头、注入固定凭据、传递自定义校验头,并需配套设置 host、x-forwarded-proto 等基础头确保权限链路完整。

在 Nginx 反向代理场景中,proxy_set_header 本身不直接做权限认证,但它能将认证凭据或校验信息可靠地透传给后端服务,是实现权限控制的关键桥梁。
透传客户端 Authorization 头(最常用)
当用户已在前端携带 Authorization(如 Bearer Token 或 Basic),Nginx 应原样转发,避免丢失认证信息:
- 配置写法简洁明确:
proxy_set_header Authorization $http_authorization; - 该变量只在客户端实际发送了 Authorization 头时才有值;未携带时为空字符串,后端可据此拒绝请求
- 注意:不要写成
$http_Authorization(大小写敏感),Nginx 中 header 变量名统一转为小写加下划线
按来源注入固定凭据(服务间调用)
适用于可信前端(如内部管理后台)调用后端 API,由 Nginx 统一添加认证头:
- 使用
if判断来源域名再设置:if ($http_origin = "https://admin.example.com") {<br> proxy_set_header Authorization "Bearer internal-abc123";<br>} - 确保
if块位于location内且在proxy_pass之前 - 不满足条件时不设该头,让后端统一拦截未授权请求,避免硬编码泄露风险
传递自定义校验头(增强鉴权维度)
除标准 Authorization 外,还可附加额外上下文用于后端细粒度判断:
- 静态标识(如租户 ID、环境标记):
proxy_set_header X-Tenant-ID "prod-team-a"; - 透传可信来源的签名头(如 CDN 或前置网关生成的
X-Api-Sign):proxy_set_header X-Api-Sign $http_x_api_sign; - 若需动态生成(如时间戳+哈希),需配合
map指令或ngx_http_lua_module,纯 Nginx 不支持计算类逻辑
关键配套项不能漏
权限信息要生效,还需保障基础链路信息完整:
- 始终设置
proxy_set_header Host $host;,确保后端识别原始域名 - 加上
proxy_set_header X-Forwarded-Proto $scheme;,让后端知道请求来自 HTTPS,避免重定向错误 - 必要时透传真实 IP:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,便于后端做 IP 白名单或风控











