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