最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx Location 配置中过滤恶意请求如何加
时间:2026-09-03 07:42:48 编辑:袖梨 来源:一聚教程网
Nginx拦截恶意请求应优先使用^~匹配敏感目录、=精确匹配高危文件、~ /.统一屏蔽点开头路径,并配合后缀过滤、关闭目录列表及map轻量特征识别,实现路由阶段早匹配早拦截。
在 Nginx 的 location 块中过滤恶意请求,核心是“早匹配、早拦截”,不让可疑请求进入后端或触发日志/文件系统访问。不靠后端判断,而是在 Nginx 路由阶段就终止响应。
用 ^~ 高优先级匹配敏感路径并拒绝
对整段目录(如后台、配置、备份路径)必须用 ^~ 修饰符,确保匹配不参与正则竞争、语义明确、优先级最高:
-
location ^~ /admin/ { deny all; }—— 拒绝所有以/admin/开头的请求,含子路径 -
location ^~ /storage/logs/ { return 404; }—— 返回 404 更隐蔽,避免暴露目录存在 - 别写
location /admin/(无修饰符),它可能被location /或其他通用规则覆盖
用 = 精确匹配高危文件
对根目录下泄露即失守的文件(如 .env、wp-config.php、nginx.conf),必须用 = 精确匹配:
-
location = /wp-config.php { return 404; }—— 只拦/wp-config.php,不误伤/public/wp-config.php.example -
location = /.git/config { deny all; }—— 封死 Git 配置文件,防止源码泄露 - 避免
location ~ .env,它会匹配/api/env或/user_env_data,极易误杀
用正则统一屏蔽点开头路径和危险后缀
利用共性特征批量拦截,规则简洁且覆盖全面:
-
location ~ /. { deny all; }—— 拦所有/.git/、/.htaccess、/.svn等隐藏路径;这条必须放在location /之前 -
location ~* .(env|ini|log|bak|sh|sql|yml|swp)$ { return 404; }—— 忽略大小写,覆盖.ENV、.SQL、.YML等变体 - 配合全局
autoindex off;,防止目录索引意外暴露结构
在 location 内结合 map + if 做轻量特征拦截
不把复杂逻辑塞进 if,而是用 map 提前归类风险等级,再统一处理:
- 在
http块定义:map $args $is_suspicious_arg {default 0;
~*(unions+select|sleep(|base64_|exec() 1;
}
- 在对应
location中:if ($is_suspicious_arg) { return 403; } - 同理可对
$request_uri、$http_user_agent建立map,避免嵌套if导致行为不可预测