Nginx – serving stale cache response while updating

cachenginx

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.

Best Answer

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.