不知道大家碰没碰到过被一些垃圾蜘蛛爬虫采集造成服务器飙升的情况,反正明月是经常性的碰到 YandexBot 、 SMTBot 等等这类不需要的网络蜘蛛爬虫的骚扰,有些甚至一天的采集量达到接近1G的流量,虽然可以通过【 使用Fail2ban禁止垃圾采集爬虫,保护Nginx服务器 】一文的办法来屏蔽,但是这类爬虫还是会不断变更名字继续出现。
其实,可以使用Nginx限制单个IP的并发连接数能够减少一些采集程序或者DDOS的攻击。这点儿明月一直都没有意识到,今天闲来无事就研究了一下,感觉从原理上还是有一定作用的,今天就分享出来,算是自己的笔记,以方便以后部署运维的时候采用。
下面是以 军哥 LNMP 一键安装包 为例的,其他LNMP包自行参考其文档吧。
在LNMP的Nginx配置中已经添加了部分代码,但是是注释掉的,可以编辑 /usr/local/nginx/conf/nginx.conf
文件
注明下面的设置需要在1.1.8以上版本的Nginx的设置才有效的,至于老版本的我就不在多说了,毕竟还用老版本的真心是不多见了!
查找:
#limit_conn_zone $binary_remote_addr zone=perip:10m;
将前面的#去掉,没这一行的,话加上
limit_conn_zone $binary_remote_addr zone=perip:10m;
默认情况下,如下图所示位置:
再在要设置限制连接数的虚拟主机配置里的server段里添加上
limit_conn perip 10;
10就是单个IP的最大并发连接数。
limit_rate 100k;
limit_rate
为限速为 100KB/秒
。
如下图实例截图:
限制每个连接速度为100K,此限制是针对单个线程,比如,我用IE下载是100K,当用迅雷时它会占用2个线程,所以迅雷下载速度为200K,如果单个IP的并发数设置为10,则多线程下载的话速度可以达到100K×10。
最后运行 /usr/local/nginx/sbin/nginx -t
测试配置是否有错误,如没有错误执行:
/usr/local/nginx/sbin/nginx -s reload
重载配置使其生效。
至此,就完成了 Nginx
限制单个 IP
的 并发连接数
/ 速度
来减缓垃圾蜘蛛爬虫采集造成的服务器负载压力了,当然效果还是要看实际数据采集情况的,明月会观察一阵子的,感觉原理上应该是有效的!对单个IP有个基本的限制还是比较靠谱的,毕竟网上太多不受规矩的爬虫了。