在 nginx 中,我正在使用
proxy_cache_use_stale updating
指令(http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale),以便对无效缓存内容的并发请求仅向上游发送 1 个请求(非第一个请求以陈旧的内容响应,而第一个请求是更新内容)。
这很好用。
现在有没有办法让第一个请求立即响应陈旧的内容,同时触发更新?
目前,对于非第一个无效请求的响应时间非常好,但第一个需要等到后端响应。在更新缓存之前,我更愿意提供陈旧的内容。
您要查找的内容称为 stale-while-revalidate (RFC 5861),它在 nginx 中作为名为proxy_cache_background_update的指令实现。类似的功能可以在 Varnish 4中找到,在 Squid 中这称为Collapsed Forwarding。
此功能在
nginx
1.11(2016 年 4 月)中添加为proxy_cache_background_update如果您想保证一次只有一个请求可以访问代理服务器(例如,服务器对请求引起的高负载很脆弱),您需要所有这三个:
在 nginx 博客中有一个很好的解释为什么需要这三个以及它们的作用:https ://www.nginx.com/blog/nginx-caching-guide/ 。