nginx 0.7 and limit_req

Igor Sysoev is at rambler-co.ru
Wed Dec 10 13:24:20 MSK 2008


On Wed, Dec 10, 2008 at 07:28:22PM +1100, Omar Kilani wrote:

> Hey Igor,
> 
> On Wed, Dec 10, 2008 at 6:32 PM, Igor Sysoev <is at rambler-co.ru> wrote:
> > On Wed, Dec 10, 2008 at 05:36:22PM +1100, Omar Kilani wrote:
> >
> >> I've recently started using the new limit_req module in nginx 0.7 to
> >> try to throttle requests to the API of our web service.
> >>
> >> We've been having some issues in that 'delayed' requests seem to be
> >> returned with a 503 HTTP response header, but with the correct body
> >> (the limit_req is under a 'location' block with proxy_pass).
> >
> > The 503 response should have special body.
> 
> Okay, then I have a strange issue.
> 
> Basically, when the nginx error.log says a request is 'delayed', nginx
> will sometimes output a 503 HTTP response code but with the same body
> as a 200 (the request goes to the backend, and the backend response is
> sent to the client).

In "delayed" case nginx should return response without 503 at all.
The request is simple delayed before passing it to a backend.

> When nginx error.log says a request is 'limited', then I'm getting a
> 503 + the 503 error (and the request doesn't go to the backend) as
> expected.
> 
> >> The configuration is:
> >>
> >> limit_req_zone  $binary_remote_addr  zone=api_one:10m   rate=1r/s;
> >>
> >> location /services/rest {
> >>     limit_req zone=api_one burst=5;
> >>     proxy_pass http://rtm_api;
> >>     ...
> >> }
> >>
> >> My intention is to limit requests to an average of 1 request a second,
> >> burstable to 5 requests, and supporting delaying requests until
> >> they're within that 1 request / second threshold.
> >>
> >> Is the 503 response a known issue?
> >
> > limit_req delays excess request until they wil be more than burst value.
> > This means that if you send 6 simultaneous requests, then 1 will be
> > processed, next 4 will be delayed for 1s, 2s, 3, and 4s, and 6th will be
> > reject with 503 code.
> 
> Great, that's what I expected.
> 
> BTW, have you seen any issues with truncated output of 'delayed'
> responses when using limit_req?
> 
> We've had a (admittedly low) number of requests which return a
> truncated body. These are logged in error.log as a client timeout, so
> it may just be that.
> 
> I personally haven't been able to reproduce these, so it could be some
> weird interaction with a particular HTTP library/client.

If you use ab it may be its issue: ab sends more requests than you
have specified and then closes simply excess ones.

> >> Also, could you tell me how to test this particular configuration to
> >> make sure it's correct?
> >>
> >> I've tried ab/http_load/siege, etc.


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list