Nginx缓存不活动与proxy_cache_valid



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;
}
}

非活动

inactive指定项目可以在缓存中保留多长时间而不被访问。在本例中,缓存管理器进程会自动从缓存中删除60分钟未请求的文件,无论该文件是否过期。

proxy_cache_valid

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

proxy_cache_valid是否覆盖非活动?5m后缓存文件是否存在?

这篇博客引用了两句话:

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

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

来自Nginx官方指南:

inactive指定项目可以在缓存中保留多长时间而不被访问。在本例中,缓存管理器进程会自动从缓存中删除60分钟未请求的文件,无论该文件是否过期。默认值为10分钟(10米(。非活动内容与过期内容不同。NGINX不会自动删除缓存控制标头定义的过期内容(例如,缓存控制:最大年龄=120(。过期(过时(的内容只有在非活动指定的时间内未被访问时才会被删除。访问过期内容时,NGINX会从原始服务器刷新该内容,并重置非活动计时器。

所以,你的问题的答案是:

proxy_cache_valid是否覆盖非活动?5m后缓存文件是否存在?

否。他们成对工作。

  1. proxy_cache_valid使缓存在5分钟内过期。

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

  3. 如果在10分钟内访问了过期的缓存,NGINX将从原始服务器刷新并重置非活动计时器。

这个答案还有助于更好地理解proxy_cache_validinactive

最新更新