流量变现70%分成 招商联系客服 招商联系客服 招商联系客服 招商联系客服

现在AI火爆,服务器也总因为AI爬虫增加负担,如何屏蔽

[复制链接]
查看82 | 回复1 | 2025-2-26 20:58:52 | 显示全部楼层 |阅读模式
本帖最后由 olive 于 2025-2-26 21:00 编辑


生成式AI的发展和逐渐成熟,给人们带来了便利的同时也给内容创作者带来了负面影响。它降低了资料原始出处的访问价值,减少了网站的利益(流量、收益和创作积极性)。如果你跟我一样,想在自己的网站屏蔽AI的抓取,那么这篇文章就是为你准备的。
这是一篇新手向教程。过程十分简单!
屏蔽原因
虽然我在前言中有所提及,但并没有特别深刻的剖析所谓的负面影响。因为本文的重点是屏蔽方法,而不是屏蔽原因。
你可以参考此文了解我的更多看法。
配置robots.txt
具备最基本SEO常识的站长应该都知道robots.txt是什么,它是一个用来控制搜索引擎爬虫抓取范围的文件。我们可以在robots.txt屏蔽某些页面/某些爬虫,或仅允许某些爬虫。
举个最典型的例子:
User-agent:*
Disallow:/admin/
上述robots.txt规定了任何爬虫都不允许访问/admin/路径的页面。这个声明非常常见,因为将网站后台索引到搜索引擎中是毫无意义的,还会招来不必要的风险。
当我们要屏蔽特定的爬虫时,就需要将*改为该爬虫的User-Agent字符串。如果要屏蔽多个,那么就写上多个User-agent字段,再接一个Disallow字段即可。
User-agent:GPTBot
User-agent:Claude-Web
User-agent:ClaudeBot
Disallow:/
以上robots.txt屏蔽了ChatGPT和Claude这两个目前最著名的AI产品的抓取。
扩充列表
在了解原理后,我们通过网友们整理好的ai.robots.txt仓库,进一步扩充AI爬虫的UA规则。
robots.txt的可靠性
配置好robots.txt能代表相安无事吗?此文件真的能有效拒绝它们吗?
答案是否定的,因为AI的爬虫并不像搜索引擎爬虫那样成熟。它们可能会忽略robots.txt的后续更新,甚至在规则的解析和执行中发生错误。搜索引擎往往不用我们担心,因为从控制台能看到爬虫的行为,或自行测试搜索结果。但AI爬虫的行为就是黑盒,你什么也无法确定。所以我们要进一步的使用Nginx屏蔽它们。
配置Nginx
如果你跟我一样并不信任AI爬虫的行为,那么就有必要在访问控制层面去屏蔽它们。Nginx是绝大多数网站都会使用的反向代理工具,在Nginx层面可以轻松做到针对User-Agent的屏蔽。
我们添加以下配置片段:
set$is_bot 0;#定义变量表示此次访问是否为AI bot,默认为0(否)
if($http_user_agent~*(GPTBot|Claude-Web|ClaudeBot)){
#如果请求的User-Agent和AI bot的规则匹配,那么设置`is_bot`为1(是)
set$is_bot 1;
}
if($is_bot=1){
#如果是AI bot,返回403
return 403;
}
Nginx中的$http_user_agent是一个内置变量,表示当前请求的User-Agent字符串。~*是一个正则匹配操作符(忽略大小写)。我们用正则来判断请求是否是AI bot,如果是就返回403页面。
进一步的,按照扩充列表章节中的开源仓库补充正则,就能轻易的从访问控制层面屏蔽这些AI爬虫。现在无论这些爬虫是否遵循robots.txt规则,我们都能有效的拒绝它们。
现实情况是,往往这个列表太长了。所以单纯的if和正则并不推荐,我们应该将其转换为map块,如下:
map$http_user_agent$user_agent_from_ai{
default 0;#默认值为0
~*GPTBot 1;
~*Claude-Web 1;
~*ClaudeBot 1;
~*KangaroosBot 1;
#添加更多...
}
注意以上的KangaroosBot,它实际上对应Kangaroo Bot。但我们不能包含空格,因为它会被解析为新的参数。使用正则表达式中的s来表示一个空格。
最后用if判断$user_agent_from_ai的值:
if($user_agent_from_ai=1){
#如果是AI bot,返回403
return 403;
}
足够了吗
答案仍然是否定的。尽管在以上方法中,我们貌似在“约定”层面和“访问”层面都拒绝了它们,但这基于我们对AI公司/爬虫一定程度上的信任。
起码我们认为它们不会伪装而是使用固定的User-Agent。所以这样做只能防君子,不防小人。假设爬虫简单的伪装一下自己,访问控制就失效了。不过,我仍然认为行业巨头在这方面是值得信任的,但小团队的产品就不一定了。
要屏蔽经过伪装的AI爬虫其实是很困难的,但也不是没有办法。如果对大量的Nginx日志/请求日志进行复杂的特征/行为分析,我认为能一定程度上识别出爬虫。甚至收集到它们的IP地址,针对IP进行更彻底的屏蔽。但我们往往没有那么庞大的数据量来做这样的分析,若是Cloudflare这样的大型CDN服务商,那就有条件做到。恰好我了解到Cloudflare已经研发了相应的功能,并且是免费使用的。
使用Cloudflare
进入Cloudflare的“安全性”->“自动程序”页面,勾选「阻止AI爬虫程序和爬网程序」功能即可。
此功能可以一定程度屏蔽具有伪装性的爬虫,也包括老实使用自己的User-Agent的爬虫。如果使用过Cloudflare的防火墙等抵御攻击相关的功能,应该会知道它们有对客户端IP进行评分,以及可靠的指纹识别、大模型行为识别等技术。所以我认为Cloudflare还是可以做好这部分的。
那么使用这个功能,会对SEO造成影响吗?毕竟搜索引擎的爬虫也可能具有明显的特征。好问题,Cloudflare自然也考虑到了。它们维护了一个已验证机器人列表,其中包含几乎已知的主流搜索引擎爬虫,并允许它们的抓取。
对抗AI
以上配置中我们对AI爬虫响应403,但它不是唯一可取的响应方式。如果你认为有些爬虫过于困扰,反复变化毫无规则。那么就成全它让它抓取吧,先收集其IP并然后使用Miragend来污染它。
回复

使用道具 举报

小麦子 | 2025-2-27 15:19:58 | 显示全部楼层
写得还是不错的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则