
最近有用户反映学校官网越来越慢,打开网站后发现100多kb的图片要几秒才能加载完毕,通过运维工具看到入站请求每秒高达3000多条,数据库的cpu占用了超过80%,由于网站采用PageAdmin CMS制作,咨询官方技术后得出结论就是存在恶意蜘蛛或爬虫,知道原因后开始着手解决,解决步骤如下,顺便做一个笔记。
查看日志后发现,每秒有几千条访问记录,这种明显就不是正常的浏览新闻,每条的请求记录referer项都是空,从这点可以判断是恶意爬虫频繁爬取站点资源和页面。
网站图片没有做cdn缓存,也没有在后台启用远程oss储存,大量的爬虫爬取图片资源,服务器带宽很容易耗尽,这就是打开网站图像加载缓慢的主因。
在nginx添加以下防盗链配置:
location /upload/
{
root /srv/wwwroot/ecreator/; # 项目实际路径
# 防盗链配置 改为你的域名
# valid_referers none blocked domain.cn *.domain.cn;
valid_referers domain.cn *.domian.cn;
if ($invalid_referer) {
return 403 ;
}
}
location /templates/
{
root /srv/wwwroot/ecreator/; # 项目实际路径
# 防盗链配置,改为你的域名
# valid_referers none blocked domain.cn *.domain.cn;
valid_referers domain.cn *.domian.cn;
if ($invalid_referer) {
return 403 ;
}
}网站部署上线后,一直使用的是动态页面,爬虫每次爬取都会连接数据库进行查询,大量访问进来,数据库cpu必然飙升,主要原因如下:
高频并发:短时间内发起成千上万次请求,导致数据库连接数激增,线程调度开销变大。
深度遍历:爬虫可能遍历所有 ID 或分页参数,导致大量重复或全量数据查询。
复杂查询触发:如果爬虫构造了特殊参数,可能触发后端复杂的联表查询或聚合操作。
缓存穿透/失效:如果爬虫请求的是未缓存的动态内容,或者故意请求不存在的资源(导致缓存穿透),所有压力都会直接透传到数据库。
解决办法:
强制外网访问静态页面,PageAdmin CMS平台版本有很强大的静态配置功能,开启步骤如下:
3.1:进入应用后台>站点设置,如下图:

站点静态功能:选择开启
前端页面访问模式:有三个模式,分别是:动态页面模式、动静态混合访问模式、内部Ip访问动态,外部访问静态文件模式
这里选择第三个,很多用户认为开启静态后运维麻烦,实际上PageAdmin的很多操作如发布内容,更新栏目等默认都会同步刷新关联的静态页面文件,当然修改模版这类操作还是需要手工去生成静态,但是比起收益,增加一点运维时间成本也是必要的。
3.2:第一次开启静态功能,需要全量生成所有页面的html文件,进入Html刷新菜单,如下图:

可直接一键刷新所有栏目、内容页和所有专题页面。
实测:11万多条新闻数据,生成时间大概15分钟左右,如下图:

PageAdmin生成静态是采用后台异步多线程的模式,点击生成按钮后就可以离开,不需要在原页面等待,这点比其他cms做得更人性化。
以上就是本次官网防范恶意爬虫的实操记录,希望能帮助大家。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。