昨天朋友说他的网站很慢,宝塔的负载100%,CPU使用率100%,并且ip并不多,那么是怎么回事呢?
拿到服务器ip,用户名和密码后,我登陆到服务器当中去,系统是Centos7,于是我首先一个top命令:
看来是mysql服务的问题,找到出问题的服务之后,就需要来看看到底是什么语句导致mysql占用这么多的cpu,打开宝塔面板,点击数据库,root密码,就可以获取到数据库的密码:
复制密码之后,在服务器输入:mysql -uroot -p密码,就可以进入mysql当中,
然后输入:show processlist;
就可以看到正在运行哪些语句了:
可以看到是全是模糊查询,那么在苹果cms当中,会使用模糊查询的地方只有搜索框,也就是说,是搜索导致服务器异常,所以需要查看网站访问日志了,看看到底是谁在一直搜索,因为后台有设置3秒内仅可搜索一次,所以怀疑是有人在恶意攻击。在宝塔面板的/www/wwwlogs目录下,可以看到网站的域名-access.log文件,这个就是网站的访问日志,如果没有的话就在网站设置伪静态或者域名的地方,点击网站目录,有个写访问日志勾选一下。打开访问日志来看一下,好家伙:
这谷歌的蜘蛛不要钱吗?
到此,已经找到真的原因,谷歌的蜘蛛不断爬取搜索页面,导致的服务器内存占用过高。接下来,针对这个问题优化就好了。
先想一下思路,无非就是禁止谷歌蜘蛛访问搜索页面。一般情况下,我们可以通过robots.txt来禁止蜘蛛爬取页面,所以直接在网站根目录下新建一个robots.txt文件,写入:
User-agent: *
Disallow:/vod/search
当然,这个是他的搜索页面前缀,写入什么内容还是要根据具体情况具体分析的。写完robots.txt之后查询语句瞬间下来了,但是还是有一些用到模糊查询的语句,我发现是在分类里面选择标签的时候有用到,于是干脆禁止谷歌爬取所有的页面,只允许它爬取指定页面:
User-agent: Googlebot
Allow: /vod/type/id/
Allow: /index.html
Allow: /vod/detail/id/
Disallow: /
做完这些之后,发现还是在爬???看来单纯的“道德限制”已经不管用了,只能通过代码来限制了,由于苹果cms使用的是thinkphp,所以只需要在index.php入口写入相关代码就可以了:
$agent = $_SERVER['HTTP_USER_AGENT']; if (strpos($agent, 'google') !== false) { if(!strpos($_SERVER['PHP_SELF'],"/vod/type/id/")&&!strpos($_SERVER['PHP_SELF'],"/vod/detail/id/")){ die('该页面不允许谷歌爬虫爬取!'); } }
这样,就处理完了这个问题,很水,但主要时分析问题然后解决。
- 上一篇: 2021年6月adsense验证pin码失败怎么办?
- 下一篇: 使用Vue编写的Deepin在线桌面