Yisou爬虫疯狂抓取?Vercel高级配置一键封禁方案

大家好,我是极客猴。

作为博客(网站)的主理人,我们都希望自己的网站以及页面能被各大搜索引擎收录,这样能提高网站的每日访问量。

但有一些搜索引擎爬虫,不顾 robots.txt 协议,对进行网站疯狂爬虫。如果网站使用的是轻量服务器,又没有 CDN 加持,加上这些爬虫访问速率过大,服务器容易被这些爬虫搞崩溃。

其中就有臭名昭著的 YisouSpider,也就是神马搜索,这搜索引擎爬虫动不动就来 10 几组 IP,给你网站进行疯狂爬虫。

我的博客网站部署到 Velcel,在后台看到这 YisouSpider 每天都来抓取数据,还一天访问好几次,一次就请求量也很大。

我也想是封禁这爬虫,在网络上搜索一圈之后,发现很大文章都是分享动态网站如何通过请求规则屏蔽爬虫。

我找不到 Vercel 如何封禁的相关文章。

实在没有办法,我只能借助 Deepseek 试试看。

Deepseek 给我两种方案,这两种方案理论上是可行。

方法一:中间件拦截

具体思路是通过中间件拦截 User-Agent(Next.js/Node.js 项目适用)。

我将 Deepseek 提高的的详解步骤分享下:

1.创建中间件文件

在项目根目录下创建 middleware.js(或 middleware.ts,如果是 TypeScript 项目),并添加以下代码:

1
2
3
4
5
6
7
export function middleware(request) {
const userAgent = request.headers.get("user-agent") || "";
// 检测 User-Agent 是否包含 "YisouSpider"
if (userAgent.includes("YisouSpider")) {
return new Response("Forbidden", { status: 403 });
}
}

2.配置中间件生效范围(可选)

若需限制中间件仅对特定路径生效,可在 config 对象中定义匹配规则:

1
2
3
export const config = {
matcher: ["/((?!api|static|favicon.ico).*)"], // 排除 API、静态文件等路径
};

3.部署到 Vercel

提交代码并推送至 Vercel 部署,中间件会自动拦截所有匹配的请求。

4.验证方法

使用 curl 命令模拟 YisouSpider 请求,检查是否返回 403:

1
curl -I -A "YisouSpider" https://your-domain.com

方法二:Vercel 的路由配置

具体思路是通过 vercel.json 配置路由规则(通用 Vercel 项目)

我也将 Deepseek 提高的的详解步骤分享下:

1.创建 vercel.json 文件

在项目根目录下创建 vercel.json,添加以下路由规则:

1
2
3
4
5
6
7
8
9
10
11
12
{
"routes": [
{
"src": "/(.*)",
"headers": {
"User-Agent": "YisouSpider"
},
"status": 403,
"continue": false
}
]
}

2.优化正则表达式(可选)

若需更精确匹配 User-Agent,可使用正则表达式(例如匹配 YisouSpider 开头):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"routes": [
{
"src": "/(.*)",
"has": {
"type": "header",
"key": "user-agent",
"value": "^YisouSpider"
},
"status": 403,
"continue": false
}
]
}

3.部署到 Vercel

提交代码并推送至 Vercel 部署,中间件会自动拦截所有匹配的请求。

4.验证方法

使用 curl 命令模拟 YisouSpider 请求,检查是否返回 403:

1
curl -I -A "YisouSpider" https://your-domain.com

两种方案的优缺点

目前这两种方案的优缺点:

方法 优点 缺点 适用场景
中间件 灵活,可结合 IP 过滤等逻辑 需代码基础,仅支持 Node.js/Next.js 复杂拦截逻辑(如动态判断)
路由配置 无需代码,配置简单 规则较简单,依赖 Vercel 路由语法 快速屏蔽已知 User-Agent

我经过测试之后发现,这两种方案确实可以,都能实现我需要的效果。

我在后台看到这爬虫规则被封禁。

后面,我在研究 vercel 的防火墙的时候,浏览到官方的文档,说直接自定义规则来控制访问内容。

这让我大喜,这说明能直接设置规则来屏蔽爬虫。

方案三:利用 Vercel 防火墙功能

登录到 Vercel 后台之后,通过在 firewall 页面中的右上角有个 configure 按钮进入配置页面。

进入 configure 页面

点击 New Rule 按钮来新建规则,IF 判断后面选择 User Agent 等于 需要封禁的爬虫,AND 后面的操作选择 Deny 来拒绝访问。
新建规则

创建成功之后,在 Costom Rules里面会看到自己刚创建 的规则。

我是将 YisouPeltalBot 都禁止访问。

创建规则

创建之后, 在右上角会出现更新规则,记得 publish 最新规则,确保刚创建的规则能生效。

发布规则

后续在 firewall 里面的 Costom Rules 就能看到这些爬虫都会被拦截,禁止访问。

搜索引擎爬虫被拦截

这种方案是目前最省事,最方便的方式。