清漆:清除说它有效,但不会删除旧内容

时间:2015-09-04 06:55:53

标签: varnish varnish-vcl

我在Digital Ocean Ubuntu VM上运行一个独立的清漆实例,基本上运行正常。该设置用于加载一个旧的wordpress服务器,该服务器位于其他任何地方。这很有效,但我很难清除内容。在谈论清除时,我的意思是使URL的缓存无效,以强制清漆从后端获取一个新版本(只是为了确保我看到一些关于清除/禁止的烦恼)。

我已经设置了一个用于清除的ACL,据我所知,使用varnishlog可以接受清除 - 一方面来自WordPress博客(W3TC处理清除)以及我试图清除的本地控制台与curl -X PURGE http://url.to.purge

问题是我仍然在浏览器中获取旧版本的URL,而不管我在本地做什么。

这就是我在vcl_recv中处理清除的方法:

  if (req.method == "PURGE") {
    if (!client.ip ~ purge) {
      return(synth(405,"Not allowed."));
    }
    return (purge);
  }

我每次清除都会得到VCL_error(200,Purged),所以我猜它可能没问题。

看起来我还在做错事。在给服务清漆重新启动后,完整的缓存刷新并且页面也刷新 - 直到那时清漆保留了所有时间 - 无论我有多少清洗。

我的清漆版本是4.0.3。

有什么想法吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

在带有vcl 4.1的Varnish 6上获得了相同的行为。 解决此问题的唯一方法是显式定义sub vcl_purge,如下所示:

sub vcl_purge {
set req.method = "GET";
set req.http.X-Purger = "Purged";
return (restart);
}

找不到原因,这可能不是您想要的原因,因为清除后,它将从后端获取内容,而无需等待客户端请求。 但是仍然没有找到其他方法,这对我来说已经足够了。