使用location指令可有效拦截敏感文件:用~*正则匹配.git、.env等隐藏文件,^~前缀屏蔽/config/等目录,=精确匹配/wp-config.php等关键文件,配置后需nginx -t验证并reload生效。

直接用 location 配合 return 403 或 deny all 就能有效拦截对 .git、.env 等敏感文件的访问,关键是匹配方式要准确、优先级要够高,避免被其他 location 规则覆盖。
用正则匹配隐藏文件和敏感后缀
这类文件名以点号开头,需用正则表达式并转义点号。推荐使用 ~*(不区分大小写)提高容错性:
-
location ~* /\.git—— 拦截所有.git目录及内部路径(如/.git/config) -
location ~* /\.env—— 拦截根目录或任意层级的.env文件 -
location ~* /\.(htaccess|htpasswd|log|bak|swp)$—— 扩展拦截常见敏感后缀,末尾加$防止误匹配参数
用前缀匹配屏蔽整个敏感目录
对 /admin/、/config/ 这类路径,优先用 ^~ 前缀匹配,语义明确且不参与正则竞争:
-
location ^~ /config/ { deny all; }—— 拒绝访问/config/及其全部子路径 -
location ^~ /storage/logs/ { return 403; }—— 适合 Laravel 等框架的日志目录 - 避免写成
location /config(无修饰符),它优先级低,可能被location /先匹配到
精确匹配单个关键配置文件
对 /wp-config.php、/config.php 这类必须严防的文件,用 = 精确匹配最稳妥:
-
location = /wp-config.php { return 403; }—— 只拦截这个完整路径,不连带/wp-config.php.bak -
location = /config.php { deny all; }—— 效果同上,deny all和return 403功能等价 - 注意:
location = /config不会匹配/config/或/config.php,必须写全路径
配置生效与验证要点
写完规则后不能直接生效,必须检查语法并重载:
- 执行
nginx -t确认配置无语法错误 - 执行
nginx -s reload或systemctl reload nginx重载配置 - 手动测试:用 curl 或浏览器访问
https://yoursite/.git/config,应返回 403 - 查看 Nginx 错误日志(
/var/log/nginx/error.log)确认是否命中规则











