nginx不鉴权,只安全透传凭据;需显式配置proxy_set_header传递authorization头或可信上游用户标识,并配合host、x-forwarded-proto等基础头确保后端正确校验。

Nginx 本身不解析登录凭据,也不做鉴权判断,它只负责把客户端已携带或上游网关已验证过的凭据,安全、准确地透传给后端服务。关键不是“怎么传”,而是“传什么、从哪来、怎么防错”。
透传客户端原始 Authorization 头(最常见)
用户登录后,前端通常在请求头中带上 Authorization: Bearer xxx 或 Authorization: Basic yyy。Nginx 默认不会转发这个头,必须显式配置:
proxy_set_header Authorization $http_authorization;
⚠️ 注意事项:
- 变量名必须是
$http_authorization(全小写 + 下划线),大小写错误(如$http_Authorization)会导致为空 - 若客户端没带该头,
$http_authorization为空字符串,这行配置会让后端收到Authorization:(空值),可能被拒绝 - 更稳妥的做法是用
map预处理,避免空头传递:
map $http_authorization $pass_auth {
"" "";
default $http_authorization;
}
proxy_set_header Authorization $pass_auth;
从可信上游注入已验证的用户标识
如果 Nginx 前面有认证网关(如 OAuth2 Proxy、Keycloak Adapter、Authelia),它们通常会把验证后的用户信息写入自定义头,例如:
X-Auth-User-ID: aliceX-Auth-Email: alice@example.comX-Auth-Groups: admin,dev
你只需原样透传:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
proxy_set_header X-User-ID $http_x_auth_user_id; proxy_set_header X-User-Email $http_x_auth_email; proxy_set_header X-User-Groups $http_x_auth_groups;
✅ 前提:确保这些头由可信组件设置,且未被客户端伪造(即上游代理必须限制外部直接访问该头)
从 Cookie 中提取并构造 Token 头(需谨慎)
有些老系统把 token 存在 Cookie 里(如 token=abc123),而下游服务只认 Authorization。这时可提取并拼接:
proxy_set_header Authorization "Bearer $cookie_token";
⚠️ 风险提示:
- 不要直接透传原始
Cookie头(含敏感 session 信息),应只取特定字段 - 若 Cookie 名含下划线(如
auth_token),需启用underscores_in_headers on;,否则 Nginx 会忽略该变量 - 更健壮的方式是用
map提取并校验格式,避免传入非法值
必须配套的基础头,否则凭据可能失效
光传凭据不够,后端需要上下文才能正确校验:
-
proxy_set_header Host $http_host;
保留原始 Host(含端口),避免后端路由或租户识别出错 -
proxy_set_header X-Forwarded-Proto $scheme;
告知是 http 还是 https,防止 JWT 签名校验因协议不一致失败 -
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
提供真实 IP,便于后端做登录态绑定、风控或白名单校验
不复杂但容易忽略










