Nginx静态资源访问控制需从路径、方法、来源、响应、系统层五方面设防,核心是默认拒绝+精准放行;配置含禁目录浏览、屏蔽隐藏文件、限制HTTP方法、来源IP/认证控制、路径隔离与权限加固。

要防止恶意下载,Nginx 静态资源的访问控制不能只靠“能打开就行”,得从路径、方法、来源、响应、系统层五方面层层设防,核心是默认拒绝 + 精准放行。下面这些配置不依赖插件,全用原生指令,实测有效。
关闭目录浏览与屏蔽隐藏文件
攻击者常通过遍历目录发现备份文件(如 .git/config、.env.bak)或敏感资源。必须主动切断这类入口:
- 在对应
location块中加autoindex off;,禁用自动索引 - 添加正则拦截规则:
location ~ /\. { deny all; },覆盖所有以点开头的路径(包括/.htaccess、/..%2f/etc/passwd等编码绕过) - 若服务包含上传目录(如
/uploads/),额外加location ^~ /uploads/ { add_header Content-Disposition "attachment; filename=\"forbidden\""; deny all; },防止直接下载原始文件
限制 HTTP 方法并按扩展名精细化匹配
静态资源只应响应 GET 和 HEAD;POST、PUT、OPTIONS 等方法对 JS/CSS/图片毫无意义,却是扫描器和自动化工具的常用试探手段:
- 避免用不安全的
if ($request_method != ...),改用limit_except指令 - 写在具体资源 location 中,例如:
location ~* \.(js|css|png|jpg|gif|woff2|ttf|svg|pdf)$ {<br> limit_except GET HEAD { deny all; }<br>} - 不要放在
location /根块里,否则可能误杀 API 接口或前端路由
实施来源控制:IP 白名单或动态鉴权
对高敏感静态资源(如内部文档、调试包、管理后台资产),仅靠文件权限不够,必须叠加网络层或服务层校验:
-
内网限定:如
location /internal-assets/ { alias /data/internal/; allow 10.0.0.0/8; allow 172.16.0.0/12; deny all; } -
基础认证:适合临时共享,用
auth_basic+htpasswd文件,注意密码文件权限设为640,属主为www-data -
对接认证服务:已有 OAuth2 或 JWT 验证后端时,用
auth_request /auth-check;,配合内部 location 调用校验接口,返回非 200 即拒访
加固路径隔离与系统权限
很多“越权下载”源于配置不当导致路径穿越或符号链接滥用:
- 敏感目录优先用
alias替代root,避免拼接错误引发路径泄露(例如alias /var/www/docs/;对应请求/docs/file.pdf,不会误解析成/var/www/docs/../etc/shadow) - 启用
disable_symlinks on;(支持 Linux 3.5+),禁止通过软链跳转到非授权目录 - 确保静态资源目录属主为
www-data(或 Nginx 运行用户),权限设为750或更严,禁止 world-writable


















