禁止目录浏览与敏感文件保护
默认情况下 NGINX 在未找到索引文件时会返回 403 或 404,但开启 autoindex 后会暴露整个目录结构。敏感文件也需要额外保护防止直接访问。
禁止目录浏览
关闭 autoindex
nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
# 确保关闭目录浏览
autoindex off;
location / {
try_files $uri $uri/ =404;
}
}
NGINX 默认
autoindex off,但若从 Apache 迁移或接手配置需确认未开启。
误开启的风险示例
nginx
# 危险配置 - 不要这样做
location /downloads/ {
autoindex on; # 暴露整个目录内容
autoindex_exact_size off;
autoindex_localtime on;
}
攻击者可直接查看所有文件列表,包括备份文件、配置文件等。
敏感文件保护
禁止访问隐藏文件
nginx
# 禁止访问 .git、.env、.htaccess 等隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
正则
/\.匹配所有以点开头的文件,deny all直接拒绝。同时关闭日志减少噪音。
禁止访问备份文件
nginx
# 禁止访问 .bak、.old、.swp、.sql 等备份文件
location ~* \.(bak|old|sql|tar|gz|zip|swp|swo)$ {
deny all;
return 404;
}
禁止访问配置文件
nginx
# 禁止访问常见配置文件
location ~* /(config\.php|wp-config\.php|\.env|web\.config)$ {
deny all;
}
# 禁止访问 composer/依赖相关
location ~* /(composer\.(json|lock)|package\.json|yarn\.lock)$ {
deny all;
}
静态资源目录隔离
公开目录与私有目录分离
nginx
server {
root /var/www/html;
# 公开静态资源
location /static/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# 私有文件(上传目录)
location /uploads/ {
# 只允许特定类型
location ~* \.(jpg|jpeg|png|gif|pdf)$ {
expires 7d;
}
location ~ \. {
deny all;
}
}
}
嵌套 location 实现文件类型白名单,非白名单文件走外层
deny all。
防盗链配合
防止敏感文件被其他网站引用:
nginx
location ~* \.(jpg|jpeg|png|gif)$ {
valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
return 403;
}
}
要点总结
- 保持
autoindex off防止目录内容暴露 - 使用
location ~ /\.统一禁止所有隐藏文件访问 - 通过正则匹配备份文件扩展名统一拒绝
- 敏感配置使用嵌套 location 实现类型白名单
log_not_found off减少 404 日志噪音- 文件保护应与权限控制、防盗链配合使用
📝 发现内容有误?点击此处直接编辑