nginx拦截敏感目录应优先使用^~匹配整目录、=精确匹配高危文件、~ /\.统一屏蔽点开头路径,并配合后缀过滤、关闭目录列表及物理路径隔离。

直接在 Nginx 的 location 块中拦截敏感目录,核心是用高优先级匹配方式切断访问路径——不是等请求进来再判断,而是让这类请求根本不会落到文件系统上。
用 ^~ 前缀匹配整目录(推荐首选)
对 /admin/、/config/、/storage/logs/ 这类需整体封禁的路径,必须用 ^~ 前缀匹配:
-
location ^~ /admin/ { deny all; }—— 拒绝该路径及所有子路径,不参与正则竞争,语义清晰、优先级高 -
location ^~ /backup/ { return 404; }—— 返回 404 更隐蔽,避免暴露目录存在性 - 别写
location /admin/(无修饰符),它优先级低,容易被location /或其他通用规则覆盖
精确匹配单个高危文件
对根目录下泄露即失守的文件(如 .env、wp-config.php),必须用 = 精确匹配:
-
location = /.env { return 404; }—— 只拦https://site.com/.env,不误伤/public/.env.example -
location = /nginx.conf { deny all; }—— 封死 Nginx 自身配置文件,防止配置泄露 - 避免
location ~ \.env,它会匹配任意位置含.env字符串的路径,极易误杀
统一屏蔽点开头的隐藏路径
像 /.git/、/.htaccess、/.svn 都以点号开头,共性明确,适合一条规则全覆盖:
-
location ~ /\. { deny all; }—— 正则匹配所有以/.开头的路径 - 这条规则必须放在
location /和其他通用规则之前,否则可能被提前匹配而失效 - 建议加
access_log off;和log_not_found off;,防止攻击扫描刷爆日志
补充防护:封禁危险后缀 + 关闭目录列表
仅拦目录还不够,备份、日志、配置类文件常被连带扫描:
-
location ~* \.(env|ini|log|bak|sh|sql|yml|yaml|swp)$ { return 404; }—— 忽略大小写,覆盖.ENV、.SQL等变体 - 全局设置
autoindex off;(放在http或server块中),防止意外开启目录索引暴露结构 - 敏感目录物理路径不要放在 Web 根目录下;若必须存在,配合
internal;和后端权限校验控制分发











