nginx - 更新时提供过时的缓存响应

nginx - 更新时提供过时的缓存响应

在 nginx 中我使用

proxy_cache_use_stale updating

指令(http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale),这样对无效缓存内容的并发请求只会向上游发送 1 个请求(非第一个请求会以陈旧的内容进行响应,而第一个请求正在更新内容)。

效果很好。

现在有没有办法让第一个请求立即以陈旧的内容做出响应,同时触发更新?

目前,对于非首次失效请求,响应时间非常好,但首次失效请求需要等到后端响应。我更愿意提供过时的内容,直到缓存更新。

答案1

你正在寻找的是 stale-while-revalidate (RFC 5861),它在 nginx 中作为一个名为的指令实现proxy_cache_background_update. 可以找到类似的功能在 Varnish 4 中在 Squid 中这被称为折叠转发

答案2

nginx此功能于1.11(2016 年 4 月)版本中添加,proxy_cache_background_update

答案3

如果您想保证一次只有一个请求可以到达代理服务器(例如,服务器易受请求引起的高负载影响),则需要所有这三个:

proxy_cache_use_stale updating;
proxy_cache_background_update on;
proxy_cache_lock on;

nginx 博客中对为什么需要这三个以及它们的作用进行了很好的解释:https://www.nginx.com/blog/nginx-caching-guide/

相关内容