limit_req inside a if block - Not allowed ?

Maxim Dounin mdounin at mdounin.ru
Fri Apr 16 04:50:32 MSD 2010


Hello!

On Thu, Apr 15, 2010 at 04:21:47PM +0530, Harish Sundararaj wrote:

> My objective is to apply the limit_req for all requests except  Googlebot.,
> So had something like this inside a location context:
> 
> 
> limit_req_zone  $binary_remote_addr  zone=one:2m   rate=25r/m; #This piece
> of conf is inside a http context
> 
> #The below code is inside a location context
> 
> if ($http_user_agent !~ Googlebot) {
>     limit_req zone=one burst=4;
> }
> 
> But I get a error :
> [emerg]: "limit_req" directive is not allowed here
> 
> Is there anyway i can achieve this ?

Try this:

    location / {
        error_page 410 = @nolimit;

        if ($http_user_agent ~ Googlebot) {
            return 410;
        }

        limit_req zone=one burst=4;

        ...
    }

    location @nolimit {
        ...
    }

See here for details:

http://wiki.nginx.org/IfIsEvil

Maxim Dounin



More information about the nginx mailing list