NGINX 无法通过 proxy_cache_background_update 提供“快速”陈旧内容

NGINX 无法通过 proxy_cache_background_update 提供“快速”陈旧内容

我们在后端服务器前运行 NGINX。

我们正在尝试启用proxy_cache_background_update该功能允许 NGINX 异步更新缓存并在执行此操作时提供陈旧的内容。

然而,我们注意到它仍然缓慢地提供陈旧的内容,就好像它不是从缓存中提供的一样。项目过期后所花的时间非常慢,显然不是从缓存中提供的 - 您可以知道它正在转到后端服务器,获取更新并将其传递给客户端。

以下是 NGINX 的配置:

proxy_cache_revalidate on;
proxy_ignore_headers Expires;
proxy_cache_background_update   on;

我们的后端服务器正在提供以下标头:

HTTP/1.1 200 OK
Date: Thu, 28 Feb 2019 21:07:09 GMT
Server: Apache
Cache-Control: max-age=1800, stale-while-revalidate=604800
Content-Type: text/html; charset=UTF-8

当尝试获取过期的页面时,我们注意到以下标头:

X-Cache: STALE

但是,提供此响应时速度非常慢,就好像它联系了后端服务器并实时完成一样。

NGINX 版本:

$ nginx -v
nginx version: nginx/1.15.9

非常感谢任何建议、提示和配置更改。

更新

看来 nginx 服务器尊敬提供过时的内容(正如我们测试过的),但它也会在同一个请求/线程上从后端更新缓存,从而导致客户端的响应时间变慢。也就是说,它似乎完全忽略了指令,proxy_cache_background_update on;并没有在后台通过单独的子请求(异步)进行更新。

答案1

请前往票务:

https://trac.nginx.org/nginx/ticket/1738#评论:6

看来这是一个重新打开的错误。

答案2

我可以通过keepalive_timeout 0;在位置块中添加来解决这个问题。

答案3

我觉得你错过了proxy_cache_use_stale updating;

从该参数的文档中:

updating如果当前正在更新,则该参数允许使用陈旧的缓存响应。

他们这样proxy_cache_background_update说:

请注意,在更新时,必须允许使用过时的缓存响应。

这就是proxy_cache_use_stale updating;正在做的事情。

相关内容