Nginx 缓存不活动 vs proxy_cache_valid

zhu*_*wei 5 nginx

Nginx 缓存配置:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
                 inactive=60m use_temp_path=off;

server {
    # ...
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 5m;
        proxy_pass http://my_upstream;
    }
}
Run Code Online (Sandbox Code Playgroud)

不活跃

inactive 指定一个项目可以在缓存中保留多久不被访问。在这个例子中,一个在 60 分钟内没有被请求的文件会被缓存管理器进程自动从缓存中删除,不管它是否已经过期。

proxy_cache_valid

为不同的响应代码设置缓存时间。如果仅指定缓存时间,则仅缓存 200、301 和 302 响应。

是否proxy_cache_valid覆盖动静吗?5m 后缓存文件是否存在?

Tit*_*ter 12

这个博客引用两段话:

\n
\n

结果 proxy_cache_valid 指示 Nginx 如果资源没有首先变为非活动状态,则该资源可以缓存 1y。当您请求过期时间较长但由于缺少请求而变得不活动的资源时,会导致缓存未命中。

\n
\n
\n

结论\nproxy_cache_path 的非活动时间应高于请求的过期时间 (proxy_cache_valid)。

\n
\n

来自官方 Nginx 指南

\n
\n

inactive 指定项目可以在缓存中保留多长时间而不被访问。在此示例中,缓存管理器进程会自动将 60 分钟内未请求的文件从缓存中删除,无论该文件是否已过期。默认值为 10 分钟 (10m)。非活动内容与过期内容不同。NGINX 不会自动删除缓存控制标头(例如 Cache-Control:max-age=120)定义的已过期内容。仅当过期(陈旧)内容在 inactive 指定的时间内未被访问时才会被删除。当访问过期内容时,NGINX 从源服务器刷新它并重置非活动计时器。

\n
\n

那么,您的问题的答案:

\n
\n

proxy_cache_valid 是否会覆盖 inactive?5m后缓存文件是否存在?

\n
\n

不,他们两人一组工作。

\n
    \n
  1. proxy_cache_valid使缓存在 5 分钟后过期。

    \n
  2. \n
  3. 如果缓存(无论是否过期)在 10 分钟内未被访问 - Nginx 会将其删除。

    \n
  4. \n
  5. 如果在 10 分钟内访问了过期的缓存 - NGINX 会从源服务器刷新它并重置非活动计时器。

    \n
  6. \n
\n

这个答案也可以帮助理解proxy_cache_validinactive更好。

\n