Nginx cache file is too small

Maxim Dounin mdounin at mdounin.ru
Thu Apr 22 14:20:08 UTC 2021


Hello!

On Thu, Apr 22, 2021 at 04:51:59AM -0400, kkobylyanskiy wrote:

> I'm using Nginx as a reverse-proxy to cache my POST request and wrote the
> following config:

[...]

>             proxy_cache_key         "$request_uri|$request_body";

[...]

>             client_body_buffer_size 512k;

[...]

> I'm getting the following error when trying so send a request for the second
> time after the first on is cached:
> 
> [crit] 20#20: *2 cache file
> "/var/cache/nginx/6/fb/bee5677b8b46add7cfef279105773fb6" is too small
> I logged in to the container and verified that this file contains cached
> content.

This is not going to work, since cache header is limited to 64k 
due to the unsigned short type being used in the on-disk format 
for header_start and body_start offsets.  The cache header 
includes the cache key, which in you case can be up to 512k or 
even larger.

Thanks for reporting this.  This probably needs some explicit 
checks to fail in an obvious way instead of silently producing 
corrupted files and complaining later.

To make this work, consider either limiting the request body to 
something less than 64k, or using a request body hash in the cache 
key instead of the full request body.  The latter can be done 
using embedded perl or njs, see here:

http://nginx.org/r/perl_set
http://nginx.org/r/js_set

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx mailing list