Blocking by user agent if ip doesn't match
Igor Sysoev
igor at sysoev.ru
Tue May 31 23:34:47 MSD 2011
On Tue, May 31, 2011 at 10:19:13PM +0300, Alexandr Gomoliako wrote:
> On 5/31/11, karabaja <nginx-forum at 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;
}
}
}
--
Igor Sysoev
More information about the nginx
mailing list