atom feed16 messages in ru.sysoev.nginxRe: Blocking by user agent if ip does...
FromSent OnAttachments
karabajaMay 31, 2011 11:49 am 
António P. P. AlmeidaMay 31, 2011 12:04 pm 
Alexandr GomoliakoMay 31, 2011 12:18 pm 
Igor SysoevMay 31, 2011 12:34 pm 
Alexandr GomoliakoMay 31, 2011 1:34 pm 
António P. P. AlmeidaMay 31, 2011 2:03 pm 
Alexandr GomoliakoMay 31, 2011 2:27 pm 
karabajaMay 31, 2011 3:00 pm 
António P. P. AlmeidaMay 31, 2011 3:25 pm 
António P. P. AlmeidaMay 31, 2011 3:31 pm 
karabajaMay 31, 2011 3:44 pm 
António P. P. AlmeidaMay 31, 2011 3:57 pm 
Igor SysoevJun 1, 2011 12:24 am 
Igor SysoevJun 1, 2011 12:27 am 
Hari HendaryantoJun 1, 2011 1:41 am 
Igor SysoevJun 1, 2011 1:47 am 
Subject:Re: Blocking by user agent if ip doesn't match
From:Igor Sysoev (ig@sysoev.ru)
Date:May 31, 2011 12:34:07 pm
List:ru.sysoev.nginx

On Tue, May 31, 2011 at 10:19:13PM +0300, Alexandr Gomoliako wrote:

On 5/31/11, karabaja <ngin@nginx.us> wrote:

syntax would be in nginx config or if it is even possible to match both statements.

It is possible and there are different ways to match two conditions. I like this one:

geo $google { default 0; 66.0.0.0/8 1; } map $http_user_agent $googlebot { default 0; ~google $google; }

server { location / { if ($googlebot) { ... } } }

It works since 0.9.6. I'm going to change case sensitivity like this

~Google # case sensitive ~*google # case insensitive

Expression compatible with old and new syntax (for gracefull upgrade):

~(?i)google # case insensitive

As to configuraiton it's better to use this logic:

geo $not_google { default 1; 66.0.0.0/8 0; }

map $http_user_agent $bots { default 0; ~(?i)google $not_google; "~(?i)(Purebot|Lipperhey|MaMaCaSpEr|libwww-perl|Mail.Ru|gold crawler)" 1; }

server { location / { if ($bots) { return 403; } } }