nginx拦截敏感路径最有效,需用正则精准匹配(如location ~ /. { deny all; })、精确匹配高危文件(如location = /.env { return 403; })、封禁危险后缀(如location ~*.(env|ini|sql|bak|log|conf|sh|py|yml|yaml|xml)$ { deny all; }),并验证配置生效。

直接在 Nginx 配置中拦截敏感路径是最有效、最轻量的静态服务安全加固手段。关键不是“能不能拦”,而是“怎么拦得准、不漏、不冲突”。
屏蔽隐藏文件和目录(如 .git、.svn、.env)
这类路径通常以点号开头,统一用正则匹配最省事,也覆盖全面:
-
推荐写法:
location ~ /\. { deny all; }—— 拦所有以.开头的路径,包括/.git/、/.env、/.htaccess等 - 加
access_log off;和log_not_found off;可避免日志刷屏 - 注意:该规则需放在
location /之前,否则可能被更宽泛的通用规则覆盖
精确拦截高危配置文件(如 .env、config.php)
单个文件风险极高,建议用精确匹配或带结尾锚定的正则,防止误放或绕过:
-
location = /.env { return 403; }—— 精确匹配根目录下的.env,优先级最高 -
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)$ { deny all; }-
~*表示忽略大小写,覆盖.ENV、.SQL等变体 - 避免使用
.*或过度宽泛的通配,比如\..*可能误拦 favicon.ico 等合法点文件
验证与收尾要点
改完别急着上线,三步确认是否真生效:
- 执行
nginx -t检查语法,再nginx -s reload重载配置 - 用
curl -I https://yoursite.com/.git/config查看响应头是否为403 Forbidden或444 - 浏览器里直接访问
/.env、/admin/.git/HEAD,确认不返回内容、不列目录、也不泄露源码











