Nginx 限制单个IP的并发连接数/速度来减缓垃圾蜘蛛爬虫采集

不知道大家碰没碰到过被一些垃圾蜘蛛爬虫采集造成服务器飙升的情况,反正明月是经常性的碰到 YandexBot 、 SMTBot 等等这类不需要的网络蜘蛛爬虫的骚扰,有些甚至一天的采集量达到接近1G的流量,虽然可以通过【使用Fail2ban禁止垃圾采集爬虫,保护Nginx服务器】一文的办法来屏蔽,但是这类爬虫还是会不断变更名字继续出现。

a8.jpg

其实,可以使用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;

默认情况下,如下图所示位置:

20180102165118.png

再在要设置限制连接数的虚拟主机配置里的server段里添加上

limit_conn perip 10;

10就是单个IP的最大并发连接数。

limit_rate 100k;

limit_rate为限速为 100KB/秒

如下图实例截图:

20180102165318.png

限制每个连接速度为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有个基本的限制还是比较靠谱的,毕竟网上太多不受规矩的爬虫了。

最后修改:2018 年 01 月 02 日 05 : 00 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论

14 条评论

  1. Koolight

    流量大的站很有必要做这个了!

    1. 明月登楼
      @Koolight

      是的,刚刚又研究了一下使用了 CDN 下的限制并发,比这个还先进!呵呵!

  2. 夏日博客

    经常遇到一些垃圾蜘蛛大量占用内在的情况。

    1. 明月登楼
      @夏日博客

      是的,我是烦死了!动不动就把主机的负载给飚起来了!这下看看改善了不少!

  3. 龙笑天

    启用了禁止垃圾爬虫的功能~~~

    1. 明月登楼
      @龙笑天

      普通的禁止爬虫功能不行,应为爬虫的UA可以自动更换的,甚至IP都会自动更换!所以还是限制一下比较好!

  4. 懿古今

    目前服务器速度还行,所以先不折腾了,等过段时间再看看

    1. 明月登楼
      @懿古今

      呵呵,稳定才是王道呀!

  5. 米粒博客

    越来越专业了

    1. 明月登楼
      @米粒博客

      呵呵,这个都是逼出来的!

  6. 金选网赚博客

    学习了,多谢分享

    1. 明月登楼
      @金选网赚博客

      客气了,多谢支持!

  7. 西枫里博客

    通过限制user-agent会不会有效一点

    1. 明月登楼
      @西枫里博客

      几乎是无效的,因为变更个user-agent太简单了,甚至有些都带智能自动更换UA的!所以……!