Итак сегодняшняя тема статьи это вопрос нагрузки которая возникает на сайте. Недавно мне пришлось столкнуться с этим. На большом мощном сервере просто висело порядка 22 LA в htop и никаким образом не было видно каких экстремальных посещаемостей. Это надо было устранять и начал ковыряться в логах сайтов на сервере, чтобы найти причину.
Самое интересное что до этого момента сервер был нагружен максимум на 10-15% он его мощности и предпосылок для роста нагрузки никакой не было. Кстати очень часто приходят запросы от заказчиков на снижение нагрузки на таких хостингах как Бегет и Таимвеб, где также бывают такие экстремальные моменты.
В ходе такой инспекции по логам я заметил что на сайте часто видны заходы с бота Amazon — почти все запросы шли оттуда. Как мы знаем достаточно большая корпорация незамеченная вроде бы в каком то спаме. Но роботы буквально валили оттуда.
Выглядели запросы так: Amazonbot и соответственно адрес страницы на которую он приходил. И я решил попробовать его заблокировать. При этом у меня уже на серверах есть свои списки блокируемых ботов, но Амазон вот туда не попадал. Хотя особо надежды что дело именно в нем не было, но также я не видел других аномалий. В общем решил попробовать.
Из моей практики боты и роботы должны реагировать на robots.txt но не всегда так вежливы к соблюдению правил. В 90% случаев для всяких вредных ботов наличие его запрета в robots не помогает. Поэтому уже давно у меня главным способом блокировки является запрет на уровне правила nginx или апаче. Апаче я не использую ибо он устарел и медленный, а вот обычная связка это nginx + php-fpm (я писал кстати о его правильной настройке), так вот обычно я ставлю правила запрета в nginx что уже не требует от ботов вредных уважать или нет правила. Их все равно не пустит на сайт.
Обычно у меня настроено для скромного блокирования вот так
1 2 3 4 5 6 |
if ($http_user_agent ~ (Bytespider)) { return 403; } if ($http_user_agent ~* (360Spider|statdom.ru|SWeb|majestic|majesticbot|majestic.com|HostTracker|Serpstatbot|Serpstat|serpstat.com|openstat.ru|openstat|DataForSeoBot) ) { return 403; } |
Для более проработанного варианта я ставлю уже вот такой вариант блокировки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
if ($http_user_agent ~ (Bytespider)) { return 418; } if ($http_user_agent ~* "(InternetMeasurement|MBCrawler|YaK|niraiya.com|Cloudfind|SafeDNSBot|SeopultContentAnalyzer|serpstatbot|LinkpadBot|DataForSeoBot|Scrapy|ZoominfoBot|semantic-visions.com crawler|Konturbot|serpstatbot|Mediatoolkitbot|DataForSeoBot|Amazonbot|Semanticbot|PetalBot|Yahoo|Seekport|Comparserbot|SemrushBot|AhrefsBot|BLEXBot|mijbot|MJ12bot|DotBot|MauiBot|NTENTbot|MegaIndex|ScooperBot|heritrix|SentiBot|Linguee|Adsbot/3.1|NetSeer|Barkrowler|Barkrowler|Bytedance|Bytespider)") { return 403; } if ($http_user_agent ~* (360Spider|80legs.com|Abonti|AcoonBot|Acunetix|adbeat_bot|AddThis.com|adidxbot|ADmantX|AhrefsBot|AngloINFO|Antelope|Applebot|BaiduSpider|BeetleBot|billigerbot|binlar|bitlybot|BlackWidow|BLP_bbot|BoardReader|Bolt 0|BOT for JCE|Bot mailto:craftbot@yahoo.com|casper|CazoodleBot|CCBot|checkprivacy|ChinaClaw|chromeframe|Clerkbot|Cliqzbot|clshttp|CommonCrawler|comodo|CPython|crawler4j|Crawlera|CRAZYWEBCRAWLER|Curious|Curl|Custo|CWS_proxy|Default Browser 0|diavol|DigExt|Digincore|DIIbot|discobot|DISCo|DoCoMo|DotBot|Download Demon|DTS.Agent|EasouSpider|eCatch|ecxi|EirGrabber|Elmer|EmailCollector|EmailSiphon|EmailWolf|Exabot|ExaleadCloudView|ExpertSearchSpider|ExpertSearch|Express WebPictures|ExtractorPro|extract|EyeNetIE|Ezooms|F2S|FastSeek|feedfinder|FeedlyBot|FHscan|finbot|Flamingo_SearchEngine|FlappyBot|FlashGet|flicky|Flipboard|g00g1e|Genieo|genieo|GetRight|GetWeb!|GigablastOpenSource|GozaikBot|Go!Zilla|Go-Ahead-Got-It|GrabNet|grab|Grafula|GrapeshotCrawler|GTB5|GT::WWW|Guzzle|harvest|heritrix|HMView|HomePageBot|HTTP::Lite|HTTrack|HubSpot|ia_archiver|icarus6|IDBot|id-search|IlseBot|Image Stripper|Image Sucker|Indigonet|Indy Library|integromedb|InterGET|InternetSeer.com|Internet Ninja|IRLbot|ISC Systems iRc Search 2.1|jakarta|Java|JetCar|JobdiggerSpider|JOC Web Spider|Jooblebot|kanagawa|KINGSpider|kmccrew|larbin|LeechFTP|libwww|Lingewoud|LinkChecker|linkdexbot|LinksCrawler|LinksManager.com_bot|linkwalker|LinqiaRSSBot|LivelapBot|ltx71|LubbersBot|lwp-trivial|Mail.RU_Bot|masscan|Mass Downloader|maverick|Maxthon$|Mediatoolkitbot|MegaIndex|MegaIndex|megaindex|MFC_Tear_Sample|Microsoft URL Control|microsoft.url|MIDown tool|miner|Missigua Locator|Mister PiX|mj12bot|Mozilla.*Indy|Mozilla.*NEWT|MSFrontPage|msnbot|Navroad|NearSite|NetAnts|netEstate|NetSpider|NetZIP|Net Vampire|NextGenSearchBot|nutch|Octopus|Offline Explorer|Offline Navigator|OpenindexSpider|OpenWebSpider|OrangeBot|Owlin|PageGrabber|PagesInventory|panopta|panscient.com|Papa Foto|pavuk|pcBrowser|PECL::HTTP|PeoplePal|Photon|PHPCrawl|planetwork|PleaseCrawl|PNAMAIN.EXE|PodcastPartyBot|prijsbest|proximic|psbot|purebot|pycurl|QuerySeekerSpider|R6_CommentReader|R6_FeedFetcher|RealDownload|ReGet|Riddler|Rippers 0|rogerbot|RSSingBot|rv:1.9.1|RyzeCrawler|SafeSearch|SBIder|Scrapy|Scrapy|Screaming|SeaMonkey$|search.goo.ne.jp|SearchmetricsBot|search_robot|SemrushBot|Semrush|SentiBot|SEOkicks|SeznamBot|ShowyouBot|SightupBot|SISTRIX|sitecheck.internetseer.com|siteexplorer.info|SiteSnagger|skygrid|Slackbot|Slurp|SmartDownload|Snoopy|Sogou|Sosospider|spaumbot|Steeler|sucker|SuperBot|Superfeedr|SuperHTTP|SurdotlyBot|Surfbot|tAkeOut|Teleport Pro|TinEye-bot|TinEye|Toata dragostea mea pentru diavola|Toplistbot|trendictionbot|TurnitinBot|turnit|Twitterbot|URI::Fetch|urllib|Vagabondo|Vagabondo|vikspider|VoidEYE|VoilaBot|WBSearchBot|webalta|WebAuto|WebBandit|WebCollage|WebCopier|WebFetch|WebGo IS|WebLeacher|WebReaper|WebSauger|Website eXtractor|Website Quester|WebStripper|WebWhacker|WebZIP|Web Image Collector|Web Sucker|Wells Search II|WEP Search|WeSEE|Wget|Widow|WinInet|woobot|woopingbot|worldwebheritage.org|Wotbox|WPScan|WWWOFFLE|WWW-Mechanize|Xaldon WebSpider|XoviBot|Yahoo|YisouSpider|zermelo|Zeus|zh-CN|ZmEu|ZumBot|ZyBorg) ) { return 403; } if ($http_user_agent ~ (Bytespider)) { return 403; } if ($http_user_agent ~* (360Spider|statdom.ru|SWeb|majestic|majesticbot|majestic.com|HostTracker|Serpstatbot|Serpstat|serpstat.com|openstat.ru|openstat|DataForSeoBot) ) { return 403; } |
Но в данном случае я добавляю строчку и получается вот такой вариант новой строки
1 |
if ($http_user_agent ~* "Amazonbot"){ return 403; } |
Конечный вариант конфига для блокировки выглядит вот так
1 2 3 4 5 6 7 |
if ($http_user_agent ~ (Bytespider)) { return 403; } if ($http_user_agent ~* (360Spider|statdom.ru|SWeb|majestic|majesticbot|majestic.com|HostTracker|Serpstatbot|Serpstat|serpstat.com|openstat.ru|openstat|DataForSeoBot) ) { return 403; } if ($http_user_agent ~* "Amazonbot"){ return 403; } |
Сохраняю и смотрю что будет. Удивительно и неожиданно вся нагрузка спадает и я вижу обычные и даже меньше 5-10% нагрузки на сервере. Чудеса однако, но приятные)
В целом если у вас идет нагрузка на хостинг или сервер при работе сайта, проверьте блокировку зловредных ботов. Это не всегда но может быть причиной.
Я столкнулся с вашей статьей и хочу поделиться своими наблюдениями. Вы подняли очень важную тему о непредвиденных источниках нагрузки на сервере, и это действительно актуально для многих администраторов сайтов.
Как вы отметили, при видимой низкой посещаемости сайта сервер может испытывать значительные нагрузки. Бывает сложно определить, откуда именно идет эта нагрузка. Я тоже замечал, что различные боты, такие как Amazonbot, могут неосознанно создавать большие проблемы, подключаясь к вашему сайту с слишком частыми запросами.
Пока вы подключались к логам, чтобы найти причину, мне стало интересно, использовали ли вы какие-либо инструменты для анализа трафика? Например, сервисы вроде Google Analytics или более специализированные инструменты, такие как AWStats, могут помочь в выявлении аномалий в посещаемости или в определении источников трафика. Хороший анализ логов иногда может дать информацию о том, какие конкретные страницы вызывают наибольшую нагрузку и почему.
Еще один момент, который хотелось бы затронуть, — это методы защиты от несоответствующих ботов. Я знаю, что многие администраторы применяют файл robots.txt для управления доступом к сайтам, но, как показала ваша ситуация с Amazonbot, его не всегда достаточно. Может быть, есть какие-то способы более индивидуального контроля, например, использование системы защиты от DDoS-атак или настройки межсетевых экранов для ограничений на основе IP? Может, вы уже об этом задумывались и у вас есть идеи, как еще можно блокировать вредоносные боты?
Наконец, интересно, какие действия вы предприняли после блокировки Amazonbot. Удалось ли вам снизить нагрузку на сервер? Каков был эффект от вашей блокировки? Ваш опыт может оказать серьезное влияние на любое сообщество веб-мастеров, которые сталкиваются с подобными проблемами.