在Nginx server块顶部精准配置两条正则规则:location ~ ^/.git(/.*|$) { deny all; } 和 location ~ /\.env(\.local|\.example|\.production)?\$ { deny all; },可有效拦截.git、.env及其变体访问,须置于所有location /及location ~ .php$之前以防覆盖。

直接在 Nginx 的 server 块中添加两条精准正则规则,就能有效拦截所有对 .git、.env 及其变体的访问请求。关键不在“多”,而在“准”和“早”——规则必须写对正则语法,且必须放在所有 location ~ \.php$ 或 location / 之前,否则会被覆盖失效。
封禁 .git 目录及子路径(含 /.git/、/.git/config 等)
使用锚定开头 + 严格路径匹配,防止误杀或绕过:
location ~ ^/\.git(/.*|$) { deny all; }-
^/\.git表示 URL 路径必须以/.git开头 -
(/.*|$)匹配/.git后接斜杠+任意内容,或直接就是/.git本身 - 比简单写
location ~ /\.git更安全,避免误匹配/path/to/my.git这类正常文件名
封禁 .env 及常见变体(.env.local、.env.example 等)
单行无法覆盖全部,建议用一组明确枚举的规则,兼顾简洁与可靠:
location ~ /\.env(\.local|\.example|\.production)?\$ { deny all; }- 点号
\.必须转义,否则.匹配任意字符 -
\$是行尾锚定,防止/myenv.php被误拦 - 括号内用
|分隔多个后缀,?表示可选,覆盖主流命名习惯 - 如需更全,可追加:
location ~ /\.env\.backup$ { deny all; }
统一屏蔽其他隐藏文件(.htaccess、.svn 等)
一条通用规则兜底,但注意它不能替代上面两条专用规则:
location ~ /\. { deny all; }- 匹配任何 URL 中出现的
/.xxx形式路径(如/.git、/.env、/.htaccess) - 优点是简洁;缺点是可能误伤极少数合法用途(如某些前端调试工具生成的
/.well-known) - 若业务无特殊需求,保留该条即可增强纵深防御
配置位置与验证要点
这些规则不是加在哪里都有效,顺序和上下文决定成败:
- 必须放在
server块顶层,**在所有location /和location ~ \.php$之前** - 执行
nginx -t检查语法,确认无location重叠警告 - 测试访问
https://yoursite.com/.env和https://yoursite.com/.git/config,应返回 403 或 404 - 生产环境建议配合
fail2ban,对高频探测敏感路径的 IP 自动封禁


















