nginx - serving stale cache response while updating

Solution 1:

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.

Solution 2:

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

Solution 3:

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/.