Jür*_*aul 36 configuration nginx
假设我有这个 nginx 配置文件
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)谢谢!
mas*_*oeh 45
keys_zone=myCache:8m 是什么意思?
正如文档所说,nginx 会将所有活动密钥和有关数据的信息存储在共享内存区域中,其name和size由 keys_zone 参数配置。为了完整起见,让我们分解每个部分
/var/cache/nginx是实际缓存存储的地方。在文件夹内,缓存文件是二进制文件,但您可以很容易地发现其中的 html 标签。levels=1:2 是级别参数设置缓存中的子目录级别数。keys_zone=myCache:8m正在定义名为 myCache 的共享内存区域,最大大小为 8 MB。它保存缓存的所有活动键和元数据。因此,每当 nginx 检查页面是否被缓存时,它首先查询共享内存区域,然后在/var/cache/nginx缓存存在的情况下查找实际缓存的位置。max_size是缓存的最大大小,例如文件大小/var/cache/nginx。inactive=1h指定缓存可以存储的最大非活动时间。在inactive参数指定的时间内未访问的缓存数据会从缓存中删除,而不管它们的新鲜度如何。指令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
Run Code Online (Sandbox Code Playgroud)
在其他进程中,缓存管理器执行此逻辑
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
Run Code Online (Sandbox Code Playgroud)
如果proxy_cache_valid(12h) 高于proxy_cache_path 中指定的非活动值(1h) 怎么办?
只要请求并访问了特定的缓存,该缓存对象将在该对象放入缓存后的 12 小时内仍然有效。之后,缓存被认为是无效的,因此 nginx 将从后端获取并重置有效计时器。但是如果对象处于非活动状态(未访问)超过一小时 - 即使在 12 小时有效缓存期间 - nginx 会因为参数而将其删除inactive。
| 归档时间: |
|
| 查看次数: |
34274 次 |
| 最近记录: |