最可靠方式是组合三类location规则:一、用location ~ /. { deny all; }统一拦截点开头路径;二、用location = /.env等精确匹配高危文件;三、用location ~* .(env|ini|...)${ return 404; }封禁危险后缀。

直接在 Nginx 配置中拦截所有含 .git、.env 等敏感路径的请求,最可靠的方式是组合使用三类 location 规则:统一屏蔽点开头路径、精确拦截高危文件、封禁危险后缀。关键不是“全不全”,而是“准不准、不漏、不被绕过”。
一、统一拦截所有以点号开头的路径(推荐首选)
这类路径(如 /.git/、/.env、/.htaccess)共性明显,用正则一次覆盖最简洁高效:
- 写法:
location ~ /\. { deny all; } - 必须放在
location /和其他通用规则之前,否则可能被更宽泛的规则提前匹配而失效 - 加
access_log off;和log_not_found off;可避免日志刷屏
二、精确拦截根目录下高风险单文件
对 .env、config.php 等一旦泄露即导致系统失守的文件,不能只靠正则模糊匹配,必须杜绝路径歧义:
-
location = /.env { return 404; }—— 精确匹配根路径下的 .env,返回 404 更隐蔽 -
location ~ /config\.php$ { deny all; }——$锚定结尾,防匹配到/config.php.bak等残留文件 - 避免写
location ~ \.env,它会误拦/public/.env.example等合法路径
三、批量封禁常见危险文件后缀
备份、日志、配置、脚本类文件常被扫描器盯上,一次性阻断可大幅降低攻击面:
- 写法:
location ~* \.(env|ini|sql|bak|log|conf|sh|py|yml|yaml|xml|swp|swo)$ { return 404; } -
~*表示忽略大小写,覆盖.ENV、.SQL等变体 - 不建议用
\..*这类过度通配,可能误伤/favicon.ico等合法点文件
四、验证与加固要点
规则写完不等于生效,必须验证并规避常见陷阱:
- 重载配置:
nginx -t && nginx -s reload - 快速测试:
curl -I http://yoursite.com/.env应返回404 Not Found或403 Forbidden,且响应头不含 Nginx 版本(需确认server_tokens off;已启用) - 检查错误日志:
tail -f /var/log/nginx/error.log,确认出现access forbidden by rule或类似提示 - 所有敏感规则应置于
location /、静态资源规则、try_files或proxy_pass块之前,防止被兜底处理


















