nginx location配置是阻断恶意扫描最直接高效层,需按优先级组织规则:用^~封禁敏感路径、=精确拦截高危文件、~ /\.屏蔽隐藏资源、~*拦截危险后缀,并关闭目录索引及物理隔离敏感目录。

Nginx 的 location 配置是阻断恶意扫描最直接、最高效的层,关键不是“加一条规则”,而是按优先级顺序组织规则,让扫描请求在抵达文件系统前就被截断。重点不在数量,而在匹配逻辑和位置。
用 ^~ 封禁整目录路径
对 /admin/、/backup/、/config/ 这类高频被扫的敏感路径,必须用 ^~ 前缀确保高优先级匹配:
-
location ^~ /admin/ { return 404; } -
location ^~ /storage/logs/ { deny all; } -
location ^~ /phpmyadmin/ { return 403; }
⚠️ 不要写 location /admin/(无修饰符),它优先级低于正则和 =,容易被其他规则覆盖。
用 = 精确拦截高危文件
.env、wp-config.php、nginx.conf 等文件一旦泄露即失守,必须精确匹配:
-
location = /wp-config.php { return 404; } -
location = /.git/config { deny all; } -
location = /robots.txt { access_log off; log_not_found off; }
避免 location ~ \.env —— 它会误杀 /public/env.example 这类合法路径。
统一屏蔽点开头的隐藏资源
所有以 /. 开头的路径(如 /.git/、/.htaccess)行为一致,一条正则全覆盖:
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
这条必须放在 location / 和其他通用 location ~ \. 规则之前,否则可能失效。
拦后缀 + 关闭目录索引双保险
扫描器常扫 .sql、.bak、.log 等备份或配置文件:
location ~* \.(env|ini|log|bak|sh|sql|yml|yaml|swp|gitignore)$ {
return 404;
}
同时全局关闭目录列表(放在 http 或 server 块中):autoindex off;
物理隔离比拦截更可靠
location 拦截是防线,但不是终点。真正安全的做法是:
- 敏感目录(如
config/、logs/)不放在 Web 根目录下 - 上传目录(如
uploads/)禁止执行脚本,且通过location ~ \.php$ { deny all; }单独限制 - 后端动态文件(如下载接口)走
internal指令,外部无法直连
不复杂但容易忽略。











