如何强制 Nginx 缓存重新验证

如何强制 Nginx 缓存重新验证

我有一个问题,我有一个包含视频文件的服务器,nginx 是办公室的代理缓存服务器。就大多数视频不变而言,它工作正常,但偶尔会有一些视频发生变化(我的意思是,他们只是在修复视频中的一些错误或瑕疵后覆盖服务器上的文件),但 nginx 无法看到它,并根据以下情况备份旧缓存

proxy_cache_valid 200 302 96h;

有什么方法可以保存缓存有效时间 96h,但强制 nginx 不时从上游重新验证缓存?

答案1

是的,可以proxy_cache_bypass指令。您可以定义查询字符串、cookie 或 HTTP 请求标头,以便您直接从后端服务器获取所需资源(绕过 Nginx 代理缓存),并将相同的响应保存到代理缓存以处理后续请求。

这里有一些例子:

location / {
  proxy_pass http://backend;
  proxy_cache_valid 168h;

  # Bypass cache with purgecache=true query string and save new response to proxy cache
  proxy_cache_bypass $arg_purgecache;

  # Bypass cache with "x-purge-cache: true" request header and save new response to proxy cache
  proxy_cache_bypass $http_x_purge_cache;

  # Bypass cache with "nocache=true" cookie and save new response to proxy cache
  proxy_cache_bypass $cookie_nocache;
}

只要 cookie、查询字符串或请求标头没有空值或“0”,proxy_cache_bypass 就会起作用。

例如,要使用查询字符串清除某些视频文件,您只需访问https://example.com/some/video.mp4?purgecache=true

相关内容