Forum: NGINX nginx post response doesn't get cached

Posted by nurettin (Guest)
on 2012-12-29 18:47
(Received via mailing list)
I'm using an old version of nginx (0.8) on centos as reverse proxy for
caching POST requests in front of two upstream servers.
The servers are built for receiving post requests and returning media,
sometimes 10 MB in size.

When the responses are small, nginx caches work fine. When I get a 2 MB
response, nginx doesn't cache the POST response.

I tried increasing proxy buffer size and busy buffer size but it had no
effect, how do I cache large POST responses in nginx?

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?2,234567,234567#msg-234567
Posted by Maxim Dounin (Guest)
on 2013-01-04 04:48
(Received via mailing list)
Hello!

On Sat, Dec 29, 2012 at 12:46:21PM -0500, nurettin wrote:

> I'm using an old version of nginx (0.8) on centos as reverse proxy for
> caching POST requests in front of two upstream servers.
> The servers are built for receiving post requests and returning media,
> sometimes 10 MB in size.
>
> When the responses are small, nginx caches work fine. When I get a 2 MB
> response, nginx doesn't cache the POST response.
>
> I tried increasing proxy buffer size and busy buffer size but it had no
> effect, how do I cache large POST responses in nginx?

Normally responses for POST requests are not cached (even if
response indicates it is cacheable) as there is no good generic
way to construct a cache key.

If you want nginx to cache responses to POST requests, you should
instruct it to do so explicitly using the "proxy_cache_methods"
directive, e.g.

    proxy_cache_methods GET HEAD POST;

See http://nginx.org/r/proxy_cache_methods.

--
Maxim Dounin
http://nginx.com/support.html
Posted by nurettin (Guest)
on 2013-01-04 07:54
(Received via mailing list)
Hi Maxim Dounin!

The proxy already caches small post responses. My cache key is request 
uri
and body. I just don't know how to increase the buffer.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?2,234567,234681#msg-234681
Posted by Maxim Dounin (Guest)
on 2013-01-04 13:33
(Received via mailing list)
Hello!

On Fri, Jan 04, 2013 at 01:53:39AM -0500, nurettin wrote:

> Hi Maxim Dounin!
>
> The proxy already caches small post responses. My cache key is request uri
> and body. I just don't know how to increase the buffer.

There are no buffers which influence request cacheability.
Responses are either cached or not regardless of their size.

I would recommend you to check if max_size= configured in
proxy_cache_path (if any) is big enough to store responses you
want to cache.  If it is, you may want to produce debug log to
investigate what goes on, see here for details

http://nginx.org/en/docs/debugging_log.html

You may also want to upgrade to make sure you are not hitting some
old bug.  The 0.8.x branch is way too old.


--
Maxim Dounin
http://nginx.com/support.html
Posted by nurettin (Guest)
on 2013-01-08 12:57
(Received via mailing list)
Here's the related configuration:

proxy_cache_path  /var/www/cache levels=1:2 keys_zone=kendi-cache:1000m
max_size=10000m;
proxy_cache_key "$request_uri|$request_body";


When I send small requests, nginx works great.
When I send a large post request (long uri) I get these logs:

I have debug on error.log, here's the output:

2013/01/08 13:50:25 [error] 32765#0: *1 cache key too large, increase
upstream buffer size 4096, client:...
2013/01/08 13:51:01 [warn] 32765#0: *1 an upstream response is buffered 
to a
temporary file /var/www/cache/tmp/0000000001 while reading upstream,
client:...
2013/01/08 13:51:20 [notice] 300#0: http file cache: /var/www/cache 
0.000M,
bsize: 4096
2013/01/08 13:51:20 [notice] 32764#0: signal 17 (SIGCHLD) received
2013/01/08 13:51:20 [notice] 32764#0: cache loader process 300 exited 
with
code 0
2013/01/08 13:51:20 [notice] 32764#0: signal 29 (SIGIO) received

I'm not sure what to do here.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?2,234567,234783#msg-234783
Posted by Maxim Dounin (Guest)
on 2013-01-08 20:32
(Received via mailing list)
Hello!

On Tue, Jan 08, 2013 at 06:57:08AM -0500, nurettin wrote:

> I have debug on error.log, here's the output:
> code 0
> 2013/01/08 13:51:20 [notice] 32764#0: signal 29 (SIGIO) received
>
> I'm not sure what to do here.

Ah, ok, the error message logged suggests that you need to
increase upstream buffer - it's used to store cache header and
it's too small to hold your cache key with request body included.

The "increase upstream buffer size" wording is indeed not very
helpful, it was made more specific in nginx 1.1.0+.  In case of
proxy, you have to increase proxy_buffer_size, see
http://nginx.org/r/proxy_buffer_size.

--
Maxim Dounin
http://nginx.com/support.html
Posted by nurettin (Guest)
on 2013-01-12 08:34
(Received via mailing list)
Thanks a lot

        proxy_buffers 8 2m;
        proxy_buffer_size 10m;
        proxy_busy_buffers_size 10m;

Now the response gets cached properly.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?2,234567,234967#msg-234967
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.