【问题标题】:Varnish: Purge says it works but doesn't remove old contentVarnish:Purge 说它有效,但不会删除旧内容
【发布时间】:2015-11-30 05:56:05
【问题描述】:

我在 Digital Ocean Ubuntu VM 上运行一个独立的 varnish 实例,它基本上可以正常工作。该设置用于加载位于其他任何位置的较旧的 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),所以我想这可能没问题。

看起来我仍然在做错事。重新启动服务清漆后,完整的缓存刷新并且页面也刷新 - 直到那时清漆将所有内容保留很长时间 - 无论我清除多少。

我的 Varnish 版本是 4.0.3。

有什么想法吗?

谢谢,

弗兰克

【问题讨论】:

  • 您要清除完整的网址吗?有参数什么的?
  • 没有参数,是的,我确实清除了确切的 URL。此外,哪个 URL 也没有关系 - 甚至主页也不起作用。 varnishlog 中的条目看起来不错,但实际上内容并没有被清除。
  • 奇怪,你试过ban而不是purge吗?我不知道,它可能有效(禁止我的意思是this)
  • 您是否尝试使用 curl 代替浏览器来测试这个?可能是您的浏览器正在缓存 url。
  • 有人解决了吗?我正在经历同样的事情

标签: varnish varnish-vcl


【解决方案1】:

使用 vcl 4.1 在 Varnish 6 上获得相同的行为。 解决它的唯一方法是像这样显式定义 sub vcl_purge:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 2019-08-22
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2017-02-11
    • 2020-04-05
    • 2023-01-22
    相关资源
    最近更新 更多