簡單介紹使用Nginx限制百度蜘蛛頻繁抓取的問題

大雄45發表於2022-02-09
導讀 這篇文章主要介紹了使用Nginx限制百度蜘蛛頻繁抓取的問題,百度蜘蛛對網站的抓取頻率高和抓取量驟增導致伺服器負載高,經常收到警告資訊,每分鐘允許百度蜘蛛抓取200次,超過頻率限制的返回503,對Nginx限制蜘蛛頻繁抓取相關知識感興趣的朋友一起看看吧

百度蜘蛛對網站的抓取頻率高和抓取量驟增導致伺服器負載高,經常收到警告資訊。最終採用nginx的ngx_http_limit_req_module模組限制了百度蜘蛛的抓取頻率。每分鐘允許百度蜘蛛抓取200次,超過頻率限制的返回503。

limit_req_zone

語法: limit_req_zone $variable zone=name:size rate=rate;

預設值: none

配置段: http

設定一塊共享記憶體限制域的引數,它可以用來儲存鍵值的狀態。 它特別儲存了當前超出請求的數量。 鍵的值就是指定的變數(空值不會被計算)。

這裡鍵值使用客戶端的agent, 使用$http_user_agent變數。 如果限制域的儲存空間耗盡了,對於後續所有請求,伺服器都會返回 503 (Service Temporarily Unavailable)錯誤。

請求頻率可以設定為每秒幾次(r/s)。如果請求的頻率不到每秒一次, 你可以設定每分鐘幾次(r/m)。比如每秒半次就是30r/m。

全域性配置nginx.conf
limit_req_zone $ning_spider zone=ning_spider:10m rate=200r/m;
某個server中
if ($http_user_agent ~* "baiduspider|Googlebot") {
 set $ning_spider $http_user_agent;
 }
 limit_req zone=ning_spider burst=5 nodelay;

引數說明:

指令linit_req_zone 中的rate=200r/m 表示每分鐘只能處理200個請求。

指令limit_req 中的burst=5 表示最大併發為5。即同一時間只能同時處理5個請求。

指令limit_req 中的nodelay 表示當已經達到burst值時,再來新請求時,直接返回503IF部分用於判斷是否是百度蜘蛛的user agent。如果是,就對變數$ning_spider賦值。這樣就做到了只對百度蜘蛛進行限制了。

測試,速率達不上可以同時開多個以下 測試

[root@localhost ~]# cat test.sh
#! /bin/bash  
sum=0;  
for i in {1..1000}  
do 
((sum = sum + i))  
curl -I -A "Baiduspider" 
curl -I -A "Sogou web spider" 
done 
echo $sum
tailf /home/wwwlog/access.log|grep 503

到此這篇關於使用Nginx限制百度蜘蛛頻繁抓取 的文章就介紹到這了。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2854937/,如需轉載,請註明出處,否則將追究法律責任。

相關文章