解决Amazonbot频繁抓取WordPress导致网站崩溃的问题

tencent promotion
原创作者: Fengjiajun

解决Amazonbot频繁抓取WordPress导致网站崩溃的问题

今天接到一位粉丝的求助:网站疑似遭到网络攻击,具体情况是他刚上线不久的WordPress网站突然变得异常卡顿,几乎无法打开。进入服务器后台查看后发现,CPU和内存资源飙升至100%,情况相当严重!如下图所示:

问题排查:从上面的CPU负载图可以看出,从3.28号开始,CPU一路飙升,难道真的是网络攻击?

该网站刚上线不久,没有进行任何推广,服务器配置为双核4G内存,且产品数据并不多,正常来说这个配置不会卡顿,且是新站应该不会是网络攻击。于是我第一时间进入宝塔面板后台,暂停网站,并获取访问日志文件进行分析。通过分析下面的日志,真相浮出水面:罪魁祸首竟然是亚马逊搜索蜘蛛 Amazonbot!

172.71.194.246 - - [01/Apr/2025:02:30:39 +0000] "GET /shop?filter_color=silver,graphite,green,purple&orderby=popularity HTTP/2.0" 403 548 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36"
172.70.34.205 - - [01/Apr/2025:02:30:40 +0000] "GET /shop?filter_color=starlight,midnight-green,red&filter_display-size=5-4-inches&orderby=price HTTP/2.0" 403 548 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36"

是的,这并非网络攻击,而是Amazonbot对网站进行了高频率的爬取,导致服务器资源被大量占用,最终引发网站瘫痪。

既然问题找到了,接下来就是如何屏蔽 Amazonbot 以恢复服务器正常运行。

方案1:通过 robots.txt 屏蔽 Amazonbot(未生效)
第一种常见的做法是编辑网站根目录下的 robots.txt 文件,添加以下内容:

User-agent: Amazonbot
Disallow: /

但经过测试,Amazonbot 似乎无视了 robots.txt 规则,该方法并未生效,亚马逊你够流氓。

方案2:在Nginx配置中屏蔽 Amazonbot(成功!)
由于服务器使用的是 Nginx 引擎,我决定直接在 Nginx 配置文件中添加规则,以彻底阻止 Amazonbot。
步骤如下:进入宝塔面板,打开 Nginx 配置文件(nginx.conf 或网站伪静态规则文件),添加以下代码 来屏蔽 Amazonbot:

if ($http_user_agent ~* "Amazonbot") {
    return 403;
}

保存配置并重启 Nginx,至此,网站恢复正常,服务器负载回归平稳,整个世界清净了!如下图所示:

总结
如果你的网站遇到类似的异常卡顿、CPU占用过高的问题,不妨检查访问日志,看看是否有搜索引擎蜘蛛过度爬取的情况。对于 Amazonbot,robots.txt 可能并不起作用,但可以通过 Nginx 直接拦截,效果立竿见影。