Мне кажется что это некорректная постановка задачи.<br>Роботы - это кормильцы. Резать их неправильно.<br>Вам надо решать задачу с другой стороны - надо чтобы клиент имел некую планку по загрузке системы, и в ней уже мог извращаться как ему угодно. Если совсем никак то проще отказаться от клиента. Это и для него лучше.<br>
Уверен, что он заплатил за раскрутку( чтобы пришли роботы) во много десятков раз больше, чем за Ваш хостинг. И если Вы будете его резать, это неправильно<br><br><div class="gmail_quote">2009/3/16 Roman Hlynovskiy <span dir="ltr">&lt;<a href="mailto:roman.hlynovskiy@gmail.com">roman.hlynovskiy@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">добрый день,<br>
<br>
а у кого какой опыт есть борьбы с поисковыми ботами средствами nginx?<br>
<br>
сегодня столкнулись с интересной проблемой - дурной клиент то-ли купил<br>
сервис по seo-оптимизации, то-ли сам где-то научился, но его ресурс<br>
обступили вкруговую поисковые боты.<br>
одновременно 10-15 разных поисковых ботов начали активно индексировать<br>
ресурс. все-бы ничего, но ресурс поднят на базе одного очень дурного<br>
CMS разработчики которого видимо не в курсе что существуют понятия<br>
индексов в БД.<br>
в итоге получился небольшой DOS. сервер выдержал, но &#39;осадок&#39; остался,<br>
в виде очень нехороших iowait&#39;ов.<br>
<br>
хотел-бы узнать кто-как решает подобные наплывы ботов у себя?<br>
закрывать полностью ip-адреса ботов тоже не вариант, т.к. речь идет о<br>
шаред хостинге.<br>
<br>
соответственно у меня возникло 2 различные идеи воплощения этой задачи;<br>
<br>
1) разрешить только одному боту в одну единицу времени получать свой<br>
честный 200, всем остальным - 503<br>
2) разрешить не более одного коннекта с одного ip-адреса при условии<br>
что user_agent соответствует некому набору бот-шаблонов.<br>
<br>
попытался реализовать второй вариант через limit_conn следующим образом:<br>
<br>
http {<br>
    limit_zone   bots  $binary_remote_addr  16m;<br>
<br>
   . . .<br>
<br>
   server {<br>
<br>
    if ($http_user_agent ~* &quot;StackRambler|Yandex&quot;) {<br>
    limit_conn bots 1;<br>
   }<br>
<br>
<br>
  }<br>
<br>
}<br>
<br>
на практике получил облом, т.к. limit_conn не может быть внутри if-а.<br>
какие варианты тут могуть быть?<br>
<br>
реализовывал-ли кто-нибудь что-нибудь подобное первому варианту?<br>
у меня вообще не приходят мысли как может выглядеть подобная конфигурация.<br>
<font color="#888888"><br>
<br>
--<br>
...WBR, Roman Hlynovskiy<br>
</font></blockquote></div><br>