Можно ли с помощью nginx отсеч запросы к сайту с неправильным user_agent && неправильным рефером?

Представьте http флуд. Идут запросы вида:


«POST /registration HTTP/1.1» 200 11973 «www.nigma.ru/» «Yandex/1.03.000 (compatible; Win16; M)»

«POST /registration HTTP/1.1» 200 11973 «www.mail.ru/» «Mediapartners-Google»

«GET /registration HTTP/1.1» 200 11973 «www.yahoo.com/» «Yandex/1.01.001 (compatible; Win16; P)»

«POST /registration HTTP/1.1» 200 11973 «www.mail.ru/» «Yandex/2.01.000 (compatible; Win16; Dyatel; Z)»


То есть понятно что агент и рефер неправильный. Но не хочется фильтровать только по одному признаку, так как бот яндекса нужен, да и переходы с этих реферов могут быть. В нгинксе нет «двойного» условия, поэтому я попытался сделать так:

location / {<br/>
 set $a &quot;ye&quot;;<br/>
 set $b &quot;ah&quot;;<br/>
 set $r &quot;&quot;;<br/>
<br/>
if ($http_referer ~* (vkontakte|porn|upyachka|nigma|mail|yahoo)) {<br/>
 set $r $r$a;<br/>
 }<br/>
<br/>
if ($http_user_agent ~* (YaDirectBot|Yandex|msnbot|Rambler|Google|Yahoo|Mail)) {<br/>
 set $r $r$b;<br/>
 }<br/>
<br/>
if ($r = &quot;yeah&quot;) {<br/>
 return 444;<br/>
 }<br/>
}<br/>



Но такое условие срабатывает даже тогда когда обычный пользователь переходит из поиска или вконтакте на сайт, и я не пойму почему срабатывает return 444. Может быть можно как-то проще сделать?
  • Вопрос задан
  • 4525 просмотров
Решения вопроса 1
@YourChief
почитайте вот это habrahabr.ru/blogs/nginx/74135/
очень вероятно, что вам поможет
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы