假设我有这个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_valid
( 12h
)高于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将保留所有活动的密钥,并且有关数据的信息将存储在共享内存区域中,其name
和size
由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其新鲜度如何。 采取从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
参数而将其删除 。