不知道大家碰沒碰到過被一些垃圾蜘蛛爬蟲采集造成服務器飆升的情況,反正明月是經常性的碰到 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有個基本的限制還是比較靠譜的,畢竟網上太多不受規矩的爬蟲了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225294.html
標籤:其他
