2013-10-12 11 views
8

chciałbym, aby zablokować wszystkie http_user_agents które identyfikują jako boty ale pozwalają Googlebot kiedy mogę umieścić następujący kod:blokowanie wszystkich botów wyjątkiem kilku z Nginx

map $http_user_agent $bad_bot { 
default 1; 
~*^Lynx 0; # Let Lynx go through 
~*^google); 
libwww-perl      1; 
~(?i)(libwww|Wget|LWP::Simple|BBBike|java|crawl|spider|bot) 1; 
} 

jednak ten blokuje dostęp do jeszcze Googlebot.

Odpowiedz

14

Wystarczy sprawdzić $http_user_agent przeciwko listy bad_bot dolarów i wrócić HTTP 403 jeśli jest w swojej czarnej liście:

location/{ 
    if ($http_user_agent ~ (libwww|Wget|LWP|damnBot|BBBike|java|spider|crawl)) { 
     return 403; 
    } 
} 

Uwaga:~ w if block wykonuje dopasowanie wielkości liter. Jeśli chcesz, aby czarna lista nie była rozróżniana, użyj ~* zamiast ~.

20

Oto moja logika dla nginx

map $http_user_agent $limit_bots { 
    default 0; 
    ~*(google|bing|yandex|msnbot) 1; 
    ~*(AltaVista|Googlebot|Slurp|BlackWidow|Bot|ChinaClaw|Custo|DISCo|Download|Demon|eCatch|EirGrabber|EmailSiphon|EmailWolf|SuperHTTP|Surfbot|WebWhacker) 1; 
    ~*(Express|WebPictures|ExtractorPro|EyeNetIE|FlashGet|GetRight|GetWeb!|Go!Zilla|Go-Ahead-Got-It|GrabNet|Grafula|HMView|Go!Zilla|Go-Ahead-Got-It) 1; 
    ~*(rafula|HMView|HTTrack|Stripper|Sucker|Indy|InterGET|Ninja|JetCar|Spider|larbin|LeechFTP|Downloader|tool|Navroad|NearSite|NetAnts|tAkeOut|WWWOFFLE) 1; 
    ~*(GrabNet|NetSpider|Vampire|NetZIP|Octopus|Offline|PageGrabber|Foto|pavuk|pcBrowser|RealDownload|ReGet|SiteSnagger|SmartDownload|SuperBot|WebSpider) 1; 
    ~*(Teleport|VoidEYE|Collector|WebAuto|WebCopier|WebFetch|WebGo|WebLeacher|WebReaper|WebSauger|eXtractor|Quester|WebStripper|WebZIP|Wget|Widow|Zeus) 1; 
    ~*(Twengabot|htmlparser|libwww|Python|perl|urllib|scan|Curl|email|PycURL|Pyth|PyQ|WebCollector|WebCopy|webcraw) 1; 
} 

location/{ 
    if ($limit_bots = 1) { 
    return 403; 
    } 
} 
+7

Ludzie powinni pamiętać, że ta metoda będzie wyłączyć Google indeksowanie strony internetowej poprzez łapanie słowo „google”, a słowo „bot” (bo HTTP_USER_AGENT Google miał bot słowo w – bmiskie

+0

@bmiskie Dobre wyjaśnienie, dziękuję W moim przypadku, właśnie to chcę zrobić! – emc

Powiązane problemy