Request limit calculation
Maxim Dounin
mdounin at mdounin.ru
Sun Jun 21 12:58:53 UTC 2015
Hello!
On Sat, Jun 20, 2015 at 06:43:57AM +0000, John Smith wrote:
> Hello, I'm John and I'm a nginx noob.
> I was wondering how the request limit reach is calculated when using limit_req_zone and limit_req.My problem is that, in development, I'm not concatenating static files such as .js and .css files. And so the browser does about 27 requests when the first page is loaded. I've set up a rate of 50r/s, but out of 27, about 18 requests receive a 503 response and I don't understand why, since the rate isn't exceeded.
> My config looks something like this. I have a link to this from the sites-enabled folder.
> limit_req_zone $binary_remote_addr zone=one:10m rate=50r/s;
> server { listen 443 ssl; ssl_certificate ...; ssl_certificate_key ...; server_name localhost; server_tokens off; gzip_types *; root ...;
> limit_req zone=one;
> location = / { index index.html; }
> location = /index.html { ... }
> location / { ... }}
> If I use limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;with limit_req zone=one burst=50 nodelay;
> it works OK.
> I was wondering why I would have to specify a burst in order for this to work.
The 50r/s rate means no more than one request per 20 milliseconds.
If a client will try to do 2 requests at the same time (with less
than 20 milliseconds difference from nginx point of view), the 503
error will be returned to the second request.
To handle such cases there is the burst parameter, and that's why
you should use it instead of trying to set enormous rate to
accomodate bursts.
Some additional details may be found in docs and in the Wikipedia
article about the algorithm used:
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
https://en.wikipedia.org/wiki/Leaky_bucket
--
Maxim Dounin
http://nginx.org/
More information about the nginx
mailing list