记录一次苹果cms宝塔优化过程

更新时间:2021-08-12 13:28:43

昨天朋友说他的网站很慢,宝塔的负载100%,CPU使用率100%,并且ip并不多,那么是怎么回事呢?

拿到服务器ip,用户名和密码后,我登陆到服务器当中去,系统是Centos7,于是我首先一个top命令:

top.png

看来是mysql服务的问题,找到出问题的服务之后,就需要来看看到底是什么语句导致mysql占用这么多的cpu,打开宝塔面板,点击数据库,root密码,就可以获取到数据库的密码:

btmysqlpassword.png

复制密码之后,在服务器输入:mysql -uroot -p密码,就可以进入mysql当中,

Linuxmysql.png

然后输入:show processlist;

就可以看到正在运行哪些语句了:

sqlquerylike.png

可以看到是全是模糊查询,那么在苹果cms当中,会使用模糊查询的地方只有搜索框,也就是说,是搜索导致服务器异常,所以需要查看网站访问日志了,看看到底是谁在一直搜索,因为后台有设置3秒内仅可搜索一次,所以怀疑是有人在恶意攻击。在宝塔面板的/www/wwwlogs目录下,可以看到网站的域名-access.log文件,这个就是网站的访问日志,如果没有的话就在网站设置伪静态或者域名的地方,点击网站目录,有个写访问日志勾选一下。打开访问日志来看一下,好家伙:

GoogleSpider.png

这谷歌的蜘蛛不要钱吗?

到此,已经找到真的原因,谷歌的蜘蛛不断爬取搜索页面,导致的服务器内存占用过高。接下来,针对这个问题优化就好了。

先想一下思路,无非就是禁止谷歌蜘蛛访问搜索页面。一般情况下,我们可以通过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('该页面不允许谷歌爬虫爬取!');
    }
}

这样,就处理完了这个问题,很水,但主要时分析问题然后解决。

教程CentOSPHP