最近帮一位徒弟搭建了蜘蛛池、本身蜘蛛稳定在3万左右了,可是好景不长、没2天蜘蛛量突然急剧下降,徒弟过来找我,说服务器非常慢,一看原来是运行堵塞,于是开始研究起来,并且解决问题。
运行堵塞
我们在宝塔里,通过top指令,查看到占用CPU的是php,而php能让我想到的,肯定是有其他爬虫或是有人恶意访问我们的网站,频率非常高,从而使php不断工作,导致运行堵塞,通过查看网站日志,发现一些IP访问的频次非常的高,如下图:
日志
真正导致服务器慢的原因,是因为这些IP不断访问页面,而PHP要不断解析页面,从而使PHP占用了CPU,导致了运行堵塞,既然我们知道了原理,我们就开始想办法屏蔽这些爬虫:
1、从蜘蛛池的层面,因为目前用的是【某旋风】,我们直接禁止游客访问,如下图:
屏蔽游客访问
通过游客访问屏蔽,着实快了不少,因为就算这些IP访问,我们也不用PHP解析页面给他,就不会影响服务器方面的性能。而且这样做的好处是,并不影响蜘蛛访问。
2、从宝塔防火墙的层面屏蔽IP
Nginx防火墙
Nginx防火墙提供IP/URL/UA屏蔽,根据本人实战的结果来讲,不建议用IP屏蔽,因为IP屏蔽的话,他们不仅是C段不同,前面的也会不同,治标不治本。
通过日志,我们不难发现,他们的UA中基本就分为2类,一类带有Android,一类带有Dalvik,于是,我们把带有这两个字符串的UA屏蔽即可,如下图:
UA黑名单
通过对UA的屏蔽,终于,我们的宝塔变绿了,运行也不卡了:
恢复
蜘蛛池
蜘蛛池也基本开始恢复,前2天掉蜘蛛,是因为蜘蛛来到显示502,或是无法打开页面,导致蜘蛛无法循环,从而掉了蜘蛛,