Nginx原生指令可实现轻量可靠的静态资源访问控制,需遵循默认拒绝原则:关闭目录浏览(autoindex off)、屏蔽点开头文件(location ~ /. { deny all; })、限制HTTP方法(limit_except GET HEAD { deny all; })、隔离路径并禁用符号链接(disable_symlinks on)、添加安全响应头及合理缓存策略。

直接用 Nginx 原生指令就能实现可靠、轻量的静态资源访问控制,不需要额外插件或复杂模块。关键在于按“默认拒绝”原则分层设防:先拦住非法路径和方法,再放行可信请求,最后加固响应与缓存。
关闭目录浏览和隐藏文件访问
这是最基础也最容易被忽略的一环。默认开启 autoindex 时,访问 /images/ 这类无首页的目录会直接列出所有文件名,可能暴露 .git、.env 或备份文件。
- 在对应 location 块中加一行:
autoindex off; - 加一条正则规则屏蔽以点开头的文件:
location ~ /\. { deny all; },能立即拦截/.htaccess、/.git/config等敏感路径
限制 HTTP 方法并精准匹配资源类型
静态资源只应响应 GET 和 HEAD 请求。POST、PUT、DELETE 等方法不仅无意义,还常被扫描器利用。
- 推荐用
limit_except指令(比 if 更安全):limit_except GET HEAD { deny all; } - 把这条规则放在具体静态资源 location 中,例如:
location ~* \.(js|css|png|woff2|svg)$,避免误伤 API 或动态接口
隔离路径与禁用符号链接
防止因 root/alias 配置不当导致路径穿越或越权读取服务器任意位置。
- 对下载类、上传类等敏感静态路径,优先用
alias替代root,并启用disable_symlinks on; - 示例:
location /downloads/ { alias /data/public/; disable_symlinks on; } - 确保目标目录权限严格(如属主 www-data,不开放写权限),从系统层补上缺口
添加安全响应头与合理缓存策略
虽然不直接拦截请求,但能大幅降低 XSS、MIME 混淆、点击劫持等风险,并减少无效重请求带来的服务压力。
- 全局或 location 块中设置:
add_header X-Content-Type-Options "nosniff";add_header X-Frame-Options "DENY";add_header Content-Security-Policy "default-src 'self';"; - 对长期不变资源(JS/CSS/字体/图片),用
expires 1y;+add_header Cache-Control "public, immutable";,既提升性能,也减少服务端校验负担


















