当上游关闭时,nginx 缓存状态在过期后命中的困惑

当上游关闭时,nginx 缓存状态在过期后命中的困惑

我的上游服务器已关闭,nginx 配置为提供过时的内容...因此缓存过期后...在第一个请求中,我们看到 $upstream_cache_status 的响应标头为 STALE。然而,下一个请求...我们看到的是 HIT 的响应。

我认为由于上游服务器已关闭,所有请求都将过期。我是否正确,或者我是否遗漏了什么...

这是我的配置

         add_header 'Cache-Control' "no-cache";
         proxy_ignore_headers Cache-Control;
         proxy_hide_header Cache-Control;
         proxy_cache aaa_cache;

         proxy_cache_lock on;
         proxy_cache_lock_timeout 60s;
         proxy_cache_lock_age 15s;
         proxy_cache_revalidate on;
         add_header X-Cache-Status $upstream_cache_status;
         proxy_cache_valid 200 3m;
         proxy_cache_valid any 30s;
         proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
         proxy_cache_background_update on;

谢谢,

答案1

缓存过期时间是针对每个缓存元素单独计算的。让我们看一个事件序列示例:

00:00:00 GET /                 - MISS  -> cached, TTL 3m, expires at 00:03:00
00:00:30 GET /example          - MISS  -> cached, TTL 3m, expires at 00:03:30
00:02:00 upstream taken down
00:02:10 GET /                 - HIT   -> cached entry still valid
00:03:10 GET /                 - STALE -> cached entry stale
00:03:20 GET /example          - HIT   -> cached entry still valid
00:03:40 GET /example          - STALE -> cached entry stale

因此,缓存条目状态为 HIT,直到该条目的 TTL 过期。

相关内容