Welcome! Log In Create A New Profile

Advanced

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

Posted by kedoff 
Представьте 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 / {
set $a "ye";
set $b "ah";
set $r "";

if ($http_referer ~* (vkontakte|porn|upyachka|nigma|mail|yahoo)) {
set $r $r$a;
}

if ($http_user_agent ~* (YaDirectBot|Yandex|msnbot|Rambler|Google|Yahoo|Mail)) {
set $r $r$b;
}

if ($r = "yeah") {
return 444;
}
}


Но такое условие срабатывает даже тогда когда обычный пользователь переходит из поиска или вконтакте на сайт, и я не пойму почему срабатывает return 444. Может быть можно как-то проще сделать?
А если так вне локейшена:

if ($request ~* "/registration") {set $e "e";}
if ($request_method = "POST") {set $e "e$e";}
if ($http_referer ......
if ($http_user_agent .......
if ($v="eeee") {return 444;}

п.с. а почему 444, а не 403?
Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 163
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready