了解nginx的proxy_cache_path指令

假设我有这个nginxconfiguration文件

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

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

  • 如果proxy_cache_valid12h )高于proxy_cache_valid的指定inactive值( 1h ), proxy_cache_path怎么proxy_cache_path ? 它将遵循哪个规则? 例如

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

谢谢!

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

正如文档所述 ,nginx将保留所有活动的密钥,并且有关数据的信息将存储在共享内存区域中,其namesize由keys_zone参数configuration。 作为一个完整的问题,让我们分解每个部分

  • /var/cache/nginx是存储实际caching的地方。 在文件夹内,caching文件是二进制文件,但你可以很容易地发现其中的HTML标签。
  • levels=1:2是levels参数设置caching中子目录级别的数量。
  • keys_zone=myCache:8m正在定义名为myCache的共享内存区域,最大大小为8 MB。 它包含caching的所有活动密钥和元数据 。 因此,只要nginx检查页面是否被caching,它首先会查询共享内存区域,如果存在caching,则在/var/cache/nginx查找实际caching的位置。
  • max_size是高速caching的最大大小,例如/var/cache/nginx上的文件大小。
  • inactive=1h指定最大非活动时间caching可以存储。 不inactive参数指定的时间内未访问的caching数据将从caching中删除,而不pipe其新鲜度如何。

cachingvalidation和删除如何工作

采取从nginx邮件列表

  • 指令proxy_cache_valid指定响应将被认为有效的时间(并且将在没有任何后端请求的情况下被返回)。 在此时间之后,响应将被视为“陈旧”,并且不会被返回或将取决于proxy_cache_use_stale设置。

  • proxy_cache_path的 非活动参数指定在最后一次使用后响应将被存储在caching中的时间。 请注意,即使陈旧的答复将被视为最近使用,如果有请求给他们。

据我所知,在这里的伪代码如何nginx的作品

当请求到来时

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

在其他进程中,cachingpipe理器执行这个逻辑

 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),该怎么办?

只要请求和访问特定的caching,该caching对象仍然有效,直到对象放入caching后12小时。 之后,caching被认为是无效的,所以nginx将从后端获取并重置有效的定时器。 但是如果对象在一个多小时内不活动(不能访问),即使在12小时的有效高速caching期内,nginx也会因为inactive参数而将其删除