一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx Location 配置中过滤恶意请求如何加

时间:2026-09-03 07:42:48 编辑:袖梨 来源:一聚教程网

Nginx拦截恶意请求应优先使用^~匹配敏感目录、=精确匹配高危文件、~ /.统一屏蔽点开头路径,并配合后缀过滤、关闭目录列表及map轻量特征识别,实现路由阶段早匹配早拦截。

在 Nginx 的 location 块中过滤恶意请求,核心是“早匹配、早拦截”,不让可疑请求进入后端或触发日志/文件系统访问。不靠后端判断,而是在 Nginx 路由阶段就终止响应。

用 ^~ 高优先级匹配敏感路径并拒绝

对整段目录(如后台、配置、备份路径)必须用 ^~ 修饰符,确保匹配不参与正则竞争、语义明确、优先级最高:

  1. location ^~ /admin/ { deny all; } —— 拒绝所有以 /admin/ 开头的请求,含子路径
  2. location ^~ /storage/logs/ { return 404; } —— 返回 404 更隐蔽,避免暴露目录存在
  3. 别写 location /admin/(无修饰符),它可能被 location / 或其他通用规则覆盖

用 = 精确匹配高危文件

对根目录下泄露即失守的文件(如 .envwp-config.phpnginx.conf),必须用 = 精确匹配:

  1. location = /wp-config.php { return 404; } —— 只拦 /wp-config.php,不误伤 /public/wp-config.php.example
  2. location = /.git/config { deny all; } —— 封死 Git 配置文件,防止源码泄露
  3. 避免 location ~ .env,它会匹配 /api/env/user_env_data,极易误杀

用正则统一屏蔽点开头路径和危险后缀

利用共性特征批量拦截,规则简洁且覆盖全面:

  1. location ~ /. { deny all; } —— 拦所有 /.git//.htaccess/.svn 等隐藏路径;这条必须放在 location / 之前
  2. location ~* .(env|ini|log|bak|sh|sql|yml|swp)$ { return 404; } —— 忽略大小写,覆盖 .ENV.SQL.YML 等变体
  3. 配合全局 autoindex off;,防止目录索引意外暴露结构

在 location 内结合 map + if 做轻量特征拦截

不把复杂逻辑塞进 if,而是用 map 提前归类风险等级,再统一处理:

  1. http 块定义:

    map $args $is_suspicious_arg {

    default 0;

    ~*(unions+select|sleep(|base64_|exec() 1;

    }

  2. 在对应 location 中:

    if ($is_suspicious_arg) { return 403; }

  3. 同理可对 $request_uri$http_user_agent 建立 map,避免嵌套 if 导致行为不可预测

热门栏目