Nginx 默认不透传 Authorization 头,需用 proxy_set_header Authorization $http_authorization 显式转发,并禁用 auth_basic 以避免拦截;建议同步传递 Host、X-Real-IP、X-Forwarded-For 和 X-Forwarded-Proto 等头。

Nginx 默认不会透传 HTTP 基本认证(Basic Auth)的 Authorization 请求头给后端,因为该头在某些场景下会被 Nginx 自动剥离或忽略——尤其当 Nginx 自身也配置了 auth_basic 时。要确保后端能收到原始认证凭据,关键在于显式转发 Authorization 头,并避免 Nginx 中途拦截或覆盖。
明确转发 Authorization 头
Nginx 不会自动继承客户端的 Authorization 头,必须用 proxy_set_header 显式设置:
location / {
proxy_pass http://backend;
proxy_set_header Authorization $http_authorization;
}-
$http_authorization是 Nginx 内置变量,对应客户端请求中的Authorization头原始值(如Basic dXNlcjpwYXNz)。 - 注意不是
$sent_http_authorization或其他变体,后者是响应头变量,不适用。
防止 Nginx 自身认证干扰
如果 Nginx 配置了 auth_basic(比如做了前置鉴权),它会在验证通过后移除 Authorization 头,导致后端收不到。此时有两种选择:
- 不启用 Nginx 的 auth_basic:让鉴权完全由后端处理,只做透传;
-
若必须双层鉴权:需在
auth_basic验证通过后,用auth_request模块或 Lua 脚本重新注入Authorization,但复杂度高,一般不推荐。
补充常用配套头(增强上下文)
为便于后端识别来源和协议,建议一并传递:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
Host:保持原始 Host -
X-Real-IP和X-Forwarded-For:保留真实客户端 IP -
X-Forwarded-Proto:标识原始协议(http/https)
示例完整配置段:
location /api/ {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $host;
proxy_set_header Authorization $http_authorization;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}验证是否生效
可临时在后端服务中打印所有请求头(如 Python Flask 的 request.headers,或 Node.js 的 req.headers),检查是否存在 Authorization 字段及其值是否与客户端发出的一致。若为空,大概率是 Nginx 未正确设置 proxy_set_header,或被 auth_basic 拦截。
不复杂但容易忽略

















