Is the limit_rate per tcp session or per HTTP request?

Ruslan Ermilov ru at
Mon Dec 21 11:26:15 UTC 2015

On Mon, Dec 21, 2015 at 11:00:09AM +0100, Stefan Hellkvist wrote:
> Hi,
> From reading the code and the docs I have gotten the impression that
> limit_rate (and limit_rate_after) is per ngx_connection which (I think)
> means that it is per HTTP request and not per socket. Am I right in this
> conclusion or is the limit actually per socket/TCP connection?

The docs at says it clearly that the limit
is set per a request, and describes one of the possible cases how this
limit can be "avoided" by the client.

The limit is implemented on the ngx_connection_t level which is usually
mapped 1:1 to a physical connection.

> What we are observing is that the limit we configure does only kick in for
> requests to files that are larger than the limit_rate_after when the
> request is done in one GET request but not when the request is done in
> chunks using byte offset parameters (that is - using many GET requests for
> the file). So clients can easily avoid the limitations by downloading the
> file chunk by chunk rather than in one request.

Opening several connections, or using SPDY/HTTP2 is another way to jump
over the limit.

> If our conclusion are right - that the limit is per HTTP request and not
> per socket so that a chunked download would not be limited - does anyone
> have any suggestion how we would go about to introduce a limit also on
> socket level? I don't mind hacking away at the code, but perhaps someone
> out there has already looked into this?

I know that Valentin (CC:ed) was working on the limit_rate module that
improves things, including variables support and extening the limitation
beyond only "per request".  It should become possible to limit byte rate
per IP, for example.

More information about the nginx-devel mailing list