In nginx I am using the

proxy_cache_use_stale updating

directive (http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale) so that concurrent request to an invalidated cached content only send 1 request to the upstream (the non-first request respond with stale content while the first request is updating the content).

this works well.

Now is there a way to also have the first request respond immediately with stale content, while at the same time triggering the update ?

right now, the response time is very good for non-first invalidating request, but the first one needs to wait until the backend responds. I would prefer serving stale content until the cache is updated.

3 Answers 3


What you're looking for is called stale-while-revalidate (RFC 5861) and it's implemented in nginx as a directive called proxy_cache_background_update. Similar functionality can be found in Varnish 4 and in Squid this is called Collapsed Forwarding.

  • 1
    Please update your answer. Since April 2016 it is updated (see Richs answer) Sep 7, 2017 at 12:31

This feature was added in nginx 1.11 (April 2016) as proxy_cache_background_update


If you want to guarantee that only one request can hit the proxied server at a time (e.g. server is fragile to high load induced by the request), you need all three of these:

proxy_cache_use_stale updating;
proxy_cache_background_update on;
proxy_cache_lock on;

There's an excellent explanation here in the nginx blog of why these three are needed and what they do: https://www.nginx.com/blog/nginx-caching-guide/.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.