教你使用Nginx限制百度蜘蛛頻繁抓取的問題
百度蜘蛛對網站的抓取頻率高和抓取量驟增導致服務器負載高,經常收到警告信息。最終采用nginx的ngx_http_limit_req_module模塊限制了百度蜘蛛的抓取頻率。每分鐘允許百度蜘蛛抓取200次,超過頻率限制的返回503。
limit_req_zone
語法: limit_req_zone $variable zone=name:size rate=rate;
默認值: none
配置段: http
設置一塊共享內存限制域的參數,它可以用來保存鍵值的狀態(tài)。 它特別保存了當前超出請求的數量。 鍵的值就是指定的變量(空值不會被計算)。
這里鍵值使用客戶端的agent, 使用$http_user_agent變量。 如果限制域的存儲空間耗盡了,對于后續(xù)所有請求,服務器都會返回 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 表示最大并發(fā)為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" http://www.hezongtianxia.com
curl -I -A "Sogou web spider" http://www.hezongtianxia.com
done
echo $sumtailf /home/wwwlog/access.log|grep 503
參考:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_limit_req_module.html
到此這篇關于使用Nginx限制百度蜘蛛頻繁抓取 的文章就介紹到這了,更多相關Nginx限制蜘蛛頻繁抓取 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Nginx之Location配置(Location匹配順序)
這篇文章主要介紹了詳解Nginx之Location配置(Location匹配順序),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
nginx出現(xiàn)權限問題解決(13: Permission denied)
本文主要介紹了nginx出現(xiàn)權限問題解決(13: Permission denied),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
Node.js站點使用Nginx作反向代理時配置GZip壓縮的教程
這篇文章主要介紹了Node.js站點使用Nginx作反向代理時配置GZip壓縮的教程,文中演示了Node使用Express框架時的HTTP傳輸壓縮配置,需要的朋友可以參考下2016-04-04

