了解 nginx proxy_cache_path 指令

了解 nginx proxy_cache_path 指令

假设我有这个 nginx 配置文件

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • 这是什么keys_zone=myCache:8m意思?文档中没有太多关于它的说明:

此外,所有活动密钥和数据信息都存储在共享内存区域中,其名称和大小由keys_zone参数配置。

  • 如果proxy_cache_valid( 12h) 高于 中的指定inactive值 ( 1h)会怎样proxy_cache_path?它会遵循哪条规则?例如

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

谢谢!

答案1

keys_zone=myCache:8m 是什么意思?

作为文献中说,nginx 将继续所有活动密钥和数据信息均已存储在共享内存区域中,其namesize由keys_zone参数配置。为了完整性,让我们逐个部分进行分解

  • /var/cache/nginx是实际存储缓存的地方。在该文件夹中,缓存文件是二进制文件,但您可以轻松发现其中的 html 标记。
  • levels=1:2levels参数设置缓存中的子目录级别数。
  • keys_zone=myCache:8m定义名为 myCache 的共享内存区域,最大大小为 8 MB。它保存所有活动键和元数据缓存。因此,每当 nginx 检查页面是否被缓存时,它都会首先查阅共享内存区域,然后查找实际缓存的位置(/var/cache/nginx如果缓存存在)。
  • max_size是缓存的最大大小,例如文件大小/var/cache/nginx
  • inactive=1h指定缓存可以存储的最大非活动时间。在参数指定的时间内未访问的缓存数据inactive将从缓存中删除,无论其新鲜度如何。

缓存验证和删除的工作原理

取自nginx 邮件列表

  • 指示proxy_cache_valid指定响应在多长时间内被视为有效(并且将返回而不需要向后端发出任何请求)。在此时间之后,响应将被视为“过时”,并且不会返回,或者将取决于proxy_cache_use_stale环境。

  • 争论不活跃proxy_cache_path指定响应在最后一次使用后将在缓存中存储多长时间。请注意,如果有对它们的请求,即使是过时的响应也会被视为最近使用的。

据我了解,下面是 nginx 工作原理的伪代码

当请求到来时

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

在其他进程中,缓存管理器执行此逻辑

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

如果 proxy_cache_valid(12h) 高于 proxy_cache_path 中指定的非活动值 (1h) 会怎样?

只要请求并访问了特定缓存,该缓存对象在放入缓存后 12 小时内仍然有效。此后,缓存被视为无效,因此 nginx 将从后端获取并重置有效计时器。但如果对象处于非活动状态(未访问)超过一小时 - 即使在 12 小时有效缓存期内 - nginx 也会删除它因为inactive参数。

相关内容