HttpLimitReq Module not blocking every request?

Hello,

I am trying to understand how the HttpLimitReq Module works. I have read
that it uses the Leaky Bucket Algorithm, however I am not sure how to
understand the behaviour I am observing. Here is my test setup:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
location /test {
limit_req zone=one nodelay;
}

Every resource under /test should be accessible only once per minute -
is that right?

Now I have set up a test script to download a file from /test every
second and I get the following results:
success
blocked
blocked
blocked
blocked
success

So every fifth request is coming through, so In total I get 12
successful requests and 48 blocked request per minute. However, from
the rate setting I would expect to have only one successful download and
59 blocked requested.

Can anyone explain why this is happening? Also is there a way to
configure nginx to show the behaviour I am expecting?

Thank you for your help!

Best regards,
Jonas Kaufmann

Posted at Nginx Forum:

Hello!

On Wed, Mar 30, 2011 at 07:26:05AM -0400, j0nes2k wrote:

is that right?
Yes. Once per minute from single ip address.

successful requests and 48 blocked request per minute. However, from
the rate setting I would expect to have only one successful download and
59 blocked requested.

Can anyone explain why this is happening? Also is there a way to
configure nginx to show the behaviour I am expecting?

My bet you’ve forgot to reload config after changing rate.

Maxim D.

Well Maxim… obviously you were right - sorry about this, could have
checked this earlier. Now everything is working as I expected.

Thanks a lot for your help!

Jonas Kaufmann

Posted at Nginx Forum: