internal指令不鉴权,仅作守门人确保location只响应内部跳转(如auth_request、rewrite last、X-Accel-Redirect),拒绝客户端直连;鉴权前置,再通过内部跳转触发protected区域透传文件。

internal 指令本身不鉴权,只守门——它确保某个 location 只能被 Nginx 内部跳转访问,拒绝一切浏览器直连。真正实现“私有下载 + 授权通道”的关键,是把鉴权逻辑前置(由后端或子请求完成),再通过内部跳转触发 internal 区域透传文件。整套机制轻量、高效、无需改静态资源,特别适合老项目加固。
用 X-Accel-Redirect 实现后端可控的私有下载
这是最常用也最稳妥的方式:前端请求走 API 路径(如 /api/download?file=report.pdf),后端校验权限后,不读文件、不吐流,只返回一个响应头:
X-Accel-Redirect: /_private/report.pdf Content-Disposition: attachment; filename="report.pdf" Content-Type: application/pdf
Nginx 收到这个头,会自动内部跳转到 / _private/... 这个 location,并由它完成真实文件读取与响应。
对应 Nginx 配置如下:
location /api/download {
proxy_pass http://backend;
proxy_set_header X-Real-IP $remote_addr;
}
location /_private/ {
internal; # ⚠️ 核心:禁止浏览器直接 GET /_private/xxx
alias /var/www/private/; # 注意:alias 末尾有斜杠,路径拼接才正确
expires 1m; # 下载类文件一般不缓存,设短些更安全
}- 用户直接访问
/ _private/report.pdf→ 立即 404 - 后端返回
X-Accel-Redirect→ Nginx 内部取文件,原样返回给用户 - 文件路径完全隐藏,不暴露真实磁盘结构
搭配 auth_request 做无侵入式登录态校验
如果权限判断足够简单(比如只检查 cookie 中的 session ID 或 JWT),可不用后端代理,全由 Nginx 完成:
upstream auth_check {
server 127.0.0.1:8000; # 你的鉴权服务(如 FastAPI/Go 小接口)
}
location = /_auth {
internal;
proxy_pass http://auth_check;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
location ^~ /download/ {
auth_request /_auth; # 先调鉴权子请求
auth_request_set $user_id $upstream_http_x_user_id; # 提取用户信息(可选)
# 鉴权成功后,内部重写到 private 区
rewrite ^/download/(.*)$ /_private/$1 break;
}
location /_private/ {
internal;
alias /var/www/private/;
}- 所有
/download/xxx请求都先过/ _auth子请求 - 鉴权服务返回 200 → 继续;返回 401/403 → Nginx 直接拦截
- 不依赖后端返回
X-Accel-Redirect,逻辑更集中
注意几个易错但关键的细节
-
alias和root别混用:alias /path/表示把 location 路径替换为该目录;root /path是把 location 路径追加到该目录后。用错会导致 404 或越权读取 -
internal必须和跳转动作配合:单独加internal没意义,必须有rewrite ... break、auth_request或X-Accel-Redirect触发内部访问 - 文件名需严格过滤:后端生成
X-Accel-Redirect值时,务必clean_path,防止../../../etc/passwd类路径穿越 - MIME 类型建议显式设置:尤其对
.pdf、.xlsx、.wasm等非标准类型,加add_header Content-Type ...避免浏览器解析异常
整个通道不增加内存压力,不走后端文件 I/O,所有文件传输由 Nginx 零拷贝完成,兼顾安全性与性能。

















