核心是精准匹配、分层防护与优先级保障:优先用^~匹配敏感目录(如/admin/、/config/),精确拦截根路径高危文件(如=/.env),正则屏蔽点开头路径及危险后缀,并确保规则置于通用规则之前。

用 location 拦截并保护后台敏感路径,核心是“精准匹配 + 分层防护 + 优先级保障”。不是简单加个 deny all 就完事,而是要让规则在请求解析早期就生效、不被绕过、不误伤正常资源。
优先用 ^~ 匹配目录前缀,确保高优先级和稳定性
对 /admin/、/backend/、/config/ 这类明确的后台路径,必须使用 ^~ 前缀匹配:
- location ^~ /admin/ { deny all; }——拦截 /admin/ 及所有子路径(如 /admin/login、/admin/api)
- location ^~ /config/ { return 404; }——返回 404 更隐蔽,避免暴露目录存在性
- 结尾斜杠不能省:写成 /admin 会误杀 /adminer 或 /admin-api 等合法路径
精确拦截根目录下高危单文件,杜绝路径歧义
像 .env、wp-config.php、.git/config 这类文件一旦泄露即失守,必须用 = 或锚定正则精准命中:
- location = /.env { return 404; }——只拦根路径下的完整文件,不连带 /public/.env.example
- location ~ ^/\.git/ { deny all; }——^/ 锚定根路径,防止误匹配 /api/gitlab
- 避免 location ~ \.env,它会把所有含 env 字符串的路径都拦掉
统一屏蔽点开头路径与危险后缀,覆盖常见变体
攻击者常扫描 .git、.htaccess、.yml 等,一条正则可批量防御:
- location ~ /\. { deny all; }——放在 server 块最顶部,确保最先匹配
- location ~* \.(env|ini|log|sql|bak|sh|yml|yaml|swp)$ { return 403; }——忽略大小写,覆盖 .ENV、.SQL
- 所有这类规则必须在 location / 或 location ~ \.php$ 等通用规则之前,否则会被跳过
叠加网段白名单或基础认证,实现分级管控
完全禁止太粗暴,内部后台更适合“限范围 + 加门槛”:
- location ^~ /backup/ { allow 10.20.0.0/16; allow 172.16.100.0/24; deny all; }
- location ^~ /monitor/ { auth_basic "Ops Area"; auth_basic_user_file /etc/nginx/.htpasswd; }
- 若前端有代理,需先用 geo 模块提取真实 IP,再做 allow/deny 判断











