应关闭autoindex功能并禁止访问敏感目录:将autoindex设为off,用location正则拦截/uploads、config等路径返回403,敏感文件移至web根目录外并结合后端权限校验与internal别名安全分发。

要防止 Nginx 服务器被外部直接遍历目录(即用户访问 /images/ 或 /uploads/ 时自动列出文件),核心是关闭 autoindex 功能,并配合权限控制与路径限制,避免敏感目录暴露。
关闭目录自动索引(autoindex)
Nginx 默认不开启目录列表,但若配置中显式写了 autoindex on;,就会启用。务必检查所有 location 块,尤其是匹配静态资源路径的配置:
- 找到类似
location /files { ... autoindex on; ... }的配置,改为autoindex off; - 如果没有显式设置,Nginx 默认就是
off,但仍建议在关键 location 中明确声明,避免继承意外开启 - 重启生效:
sudo nginx -t && sudo systemctl reload nginx
禁止访问特定目录(如 uploads、config、backup)
对存放敏感内容的目录(如用户上传、配置备份等),应直接拒绝访问,而非仅靠隐藏列表:
- 在 server 块或 http 块中添加统一拦截规则:
location ~ ^/(uploads|config|backup|\.git|\.env|logs) {
deny all;
return 403;
} - 注意正则顺序:该规则需放在通用静态文件 location(如
location ~ \.(jpg|png|css)$)之前,否则可能被覆盖 - 测试是否生效:用 curl 访问
http://yoursite.com/uploads/,应返回 403 而非 404 或文件列表
限制目录访问权限 + 配合后端校验(进阶防护)
仅靠 Nginx 拦截不够彻底,尤其当文件需有条件访问(如登录后下载)时:
- 将敏感文件存放在 Web 根目录之外(如
/var/www/private/uploads/),Nginx 不映射到 URL 路径 - 通过后端脚本(PHP/Python)做权限判断,再用
X-Accel-Redirect(Nginx)或sendfile安全输出文件 - 示例(Nginx + PHP):
location /download/ {
internal;
alias /var/www/private/;
}
后端响应头中加X-Accel-Redirect: /download/real_file.pdf,Nginx 内部重定向并发送,外部无法直连
验证与日常防护建议
完成配置后,主动模拟扫描行为验证效果:
- 用浏览器或 curl 直接请求常见目录路径:
/images/、/js/、/backup/,确认全部返回 403 或 404,不出现文件列表 - 使用工具如
gobuster dir -u https://site.com -w wordlist.txt快速探测是否仍有可列目录 - 定期检查 Nginx 配置中是否新增了未审核的
autoindex on或宽松的location /规则 - 日志中关注大量 403/404 及高频目录路径访问,可能是扫描痕迹,可配合 fail2ban 封禁 IP










