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
on 2012-12-29 18:47
on 2013-01-04 04:48
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
on 2013-01-04 07:54
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
on 2013-01-04 13:33
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
on 2013-01-08 12:57
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
on 2013-01-08 20:32
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
on 2013-01-12 08:34
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
Log in with Google account | Log in with Yahoo account
No account? Register here.