request body and client_body_buffer_size

Maxim Dounin mdounin at mdounin.ru
Sat Sep 14 13:49:22 UTC 2013


Hello!

On Fri, Sep 13, 2013 at 05:56:51PM -0700, Jeroen Ooms wrote:

> Is it correct that when $content_length > client_body_buffer_size,
> then $request_body == "" ? If so this would be worth documenting at
> request_body.

Yes, it's intended behaviour.  If a request body is larger than 
client_body_buffer_size, it's written to disk and not available in 
memory, hence no $request_body.  The limitation is more or less 
obvious, and it's also explicitly documented here in 
the $r->request_body() method documentation:

http://nginx.org/en/docs/http/ngx_http_perl_module.html#methods

It might worth adding some short reference into $request_body 
variable description though.

> I am using:
> 
>     proxy_cache_methods POST;
>     proxy_cache_key "$request_method$request_uri$request_body";
> 
> Which works for small requests, but for large requests clients got
> very strange results due to $request_body being empty and hence
> getting false cache hits for completely different form posts.
> 
> Is there something available like $body_hash that can be used as a
> caching key even for large request bodies? Or alternatively, how
> would I configure nginx to not cache requests when content_length
> is larger than client_body_buffer_size?

The

    proxy_no_cache $request_body_file;

should do the trick, see http://nginx.org/r/proxy_no_cache.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx mailing list