应配置location块拦截敏感路径:先用location ~ /. { deny all; }屏蔽点开头文件,再用^~前缀匹配保护/.git等目录,最后用正则封禁.env、.log等危险后缀。

要防止 Nginx 暴露服务器内部文件(如 .htaccess、.git、.env、源码文件等),核心是通过 location 块配合正则或前缀匹配,对敏感路径返回 403 或直接拒绝访问。
禁止访问隐藏文件和目录
Nginx 默认不阻止以点号(.)开头的文件(如 .git/config、.env),这些常含敏感信息。需显式拦截:
在 server 或 location 块中添加:
location ~ /\. {
deny all;
}
该规则匹配任意以 /. 开头的 URI(如 /\.git/、/\.ssh/),并拒绝所有请求。
限制常见敏感文件类型
除隐藏文件外,还需阻止直接下载配置文件、备份文件、日志等。可统一用正则过滤扩展名:
location ~ \.(env|ini|log|sh|sql|bak|swp|gitignore|gitattributes)$ {
deny all;
}
注意:Nginx 不解析文件内容,仅按 URI 后缀判断,因此 /config.php.bak 会被拦截,但 /config.php?backup=1 不受影响(由后端处理)。
禁止访问特定目录(如 .git、.svn)
版本控制元数据目录必须完全屏蔽:
location ^~ /.git {
deny all;
}
location ^~ /.svn {
deny all;
}
location ^~ /logs {
deny all;
}
使用 ^~ 前缀匹配,确保优先于正则 location;避免用 ~ 正则,否则可能因大小写或路径嵌套导致漏判(如 /.Git/)。
确保 root 和 alias 配置安全
若使用 alias 指向非文档根目录,需防止路径遍历(如 ../../../etc/passwd):
- 避免在
alias中使用用户输入变量 - 用
location = /static/等精确匹配限定范围 - 启用
disable_symlinks(仅限 Linux)防止符号链接逃逸:disable_symlinks on if_not_owner;
同时检查 root 路径是否超出预期目录树,例如 root /var/www/html; 不应允许访问 /var/www/ 上层。











