了解Nginx proxy_cache_path指令


30

假设我有这个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_valid12h)高于中的指定inactive值(1hproxy_cache_path怎么办?它将遵循哪个规则?例如

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

谢谢!

Answers:


39

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

文档所述,nginx的将保留所有活性键和信息有关的数据被存储在共享存储器区,其namesize由所述keys_zone参数进行配置。出于完整性考虑,让每个零件分解

  • /var/cache/nginx是实际缓存存储的位置。在该文件夹内,缓存文件是二进制文件,但您可以轻松地在其中找到html标签。
  • levels=1:2 “ levels”参数设置高速缓存中子目录级别的数量。
  • 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),该怎么办?

只要请求并访问了特定的缓存,该缓存对象将一直有效到对象放入缓存后的12h。在那之后,缓存被认为是无效的,因此nginx将从后端获取并重置有效计时器。但是,如果对象处于非活动状态(未访问)超过一个小时(即使在12小时内,valid-cache-period),nginx也会由于参数而将其删除inactive


“在那之后,缓存被认为是无效的,因此nginx将从后端获取并重置有效计时器。” - 那很有意思。那么,即使没有用户获取请求,nginx也会获取请求?因此,例如,如果inactive为,365d而valid为1dinvalid ,那么即使没有人提出该请求,nginx也会在一年中每天获取缓存中的请求?
马丁·托马

1
很好的答案,但是我似乎找不到关于我们与其中一些参数一起使用的计量单位的任何文档。例如,inactive参数需要时间值,但是我看不到除了h(大约1个月或1天如何?等等)可以使用的其他值。我们应该用max_size什么来指定?字节?1 MB可以使用1M吗?
Sunil D.

4
@SunilD。-您可以前往:nginx.org/en/docs/syntax.html
亚当齐
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.