最近网站经常告警,网站出现服务器CPU占用率飙升、页面响应速度变慢甚至无响应的情况。查询统计数据发现网站的流量没有明显的上涨,服务器硬件也没有出现问题,最后通过服务器日志发现有很多恶意垃圾蜘蛛在不停的爬取网站,导致这个问题,果断屏蔽了这些垃圾蜘蛛。
文章目录
许多网站管理员可能会遇到这样的情况:某天网站突然变慢,甚至服务器资源占满,用户访问出现 502 或 504 错误。这可能是由于垃圾爬虫大量抓取页面,导致服务器负载过高。常见表现包括:
要解决这个问题,首先需要找出导致网站变慢的真正原因。
在确认问题之前,我们需要通过 Nginx 日志分析来确定是否是垃圾爬虫导致的问题。
Nginx 的错误日志存储了服务器遇到的问题,可通过以下命令查看:
tail -f /var/log/nginx/error.log
如果发现大量 worker_connections are not enough
或 upstream timed out
等错误,说明服务器负载过高,可能是恶意爬虫引起的。可以使用以下命令查看哪些 IP 正在频繁请求:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
如果发现某些 IP 短时间内大量请求,则可能是爬虫。
还可以查看 User-Agent 来识别是否是已知的垃圾爬虫:
awk -F\" '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
如果出现了异常的 User-Agent(如 Python-urllib
、Scrapy
、MJ12bot
等),说明网站可能被垃圾爬虫攻击。当确认是垃圾爬虫导致服务器负载过高后,可以在 Nginx 配置中添加规则进行拦截。
nginx.conf
配置文件的 server
块中添加:if ($http_user_agent ~* (MJ12bot|AhrefsBot|SemrushBot|DotBot|BLEXBot)) {
return 403;
}
此规则会阻止匹配的 User-Agent 访问网站。
如果某些 IP 频繁请求,可直接封禁:
deny 192.168.1.1;
deny 203.0.113.0/24;
此规则禁止指定 IP 访问网站。
limit_req_zone
控制访问频率:http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
}
此配置限制单个 IP 每秒最多 10 个请求。
常见垃圾爬虫包括:
AhrefsBot
(Ahrefs SEO 爬虫)MJ12bot
(Majestic SEO 爬虫)SemrushBot
(Semrush SEO 爬虫)DotBot
(Moz 爬虫)BLEXBot
Exabot
Python-urllib
Scrapy
如果网站突然变慢,可能是垃圾爬虫导致的。通过 Nginx 日志分析,我们可以识别恶意爬虫,并通过屏蔽 User-Agent、封 IP、限制请求频率等方式减少影响。定期监控服务器日志,确保网站性能稳定,同时避免搜索引擎误伤,合理配置爬虫管理策略。