NGINX 从缓存中清除内容

2024 年 8 月 29 日 | 4 分钟阅读

NGINX 允许从缓存中删除旧的和过时的缓存文件。删除过时的缓存内容是强制性的,以防止同时提供网页的旧版本和新版本。 当收到一个包含自定义 HTTP 标头或 HTTP PURGE 方法的特殊 "purge" 请求时,将清除(清理)缓存。

配置缓存清除

让我们设置一个配置,用于识别使用 HTTP PURGE 方法并删除匹配 URL 的请求。

1. 在 http {} 范围内,添加一个新变量,例如,依赖于 $request_method 变量的 $purge_method

2. 在配置缓存的 location {} 块中,添加 proxy_cache_purge 指令以指定缓存清除请求的条件。 在我们的示例中,它是上一步中配置的 $purge_method

发送清除命令

当 proxy_cache_purge 指令的配置完成后,我们需要发送一个特殊的 cache?purge 请求来清除缓存。 我们可以使用一系列工具来发出清除请求,包括本例中的 curl 命令

在上面的示例中,具有星号通配符指定的公共 URL 部分的资源被清除。 但是,此类缓存条目不会从缓存中完全删除:它们保留在磁盘上,直到它们由于不活动、由缓存清除器(启用 purger 参数到 proxy_cache_path)或由客户端尝试访问它们而被删除。

限制对清除命令的访问

我们建议您限制允许发送缓存清除请求的 IP 地址的数量

在上面的示例中,NGINX 检查 PURGE 方法是否在请求中使用,如果是,则分析客户端 IP 地址。 如果 IP 地址被列入白名单,则 $purge_method 设置为 $purge_allowed:1 用于允许清除,0 用于拒绝清除。

从缓存中完全删除文件

要完全删除与星号匹配的缓存文件,请激活一个特殊的缓存清除器进程,该进程永久迭代所有缓存条目并删除与通配符密钥匹配的条目。 将 purger 参数包含到 http {} 范围内的 proxy_cache_path 指令中

缓存清除配置示例

字节范围缓存

有时,初始缓存填充操作需要很长时间,尤其对于大型文件类型。 例如,当视频文件开始下载以满足对文件一部分的初始请求时,后续请求必须等待整个文件下载并放入缓存中。

在 Nginx 中,可以缓存此类范围请求,并使用 Cache Slice 模块逐渐填充缓存,该模块将文件分成较小的 "slices"。 每个范围请求选择涵盖请求范围的特定切片,如果此范围尚未缓存,则将其放入缓存中。 所有其他对这些切片的请求都从缓存中获取数据。

要启用字节范围缓存

  • 首先,确保 NGINX 是使用 Cache Slice 模块编译的。
  • 使用 slice 指令定义切片的大小
  • 选择使切片下载速度快的切片大小。 如果大小太小,则内存使用量可能会过高,并且会打开大量文件描述符。 如果大小较大,则处理请求可能会导致延迟。 将 $slice_range 变量添加到缓存键中
  • 启用状态码为 206 的响应的缓存
  • 通过设置变量,即 Range 标头字段中的 $slice_range,启用将范围请求传递到代理服务器

这是完整的配置

请注意,如果启用了切片缓存,则初始文件不得更改。

组合配置示例