我正在 Digital Ocean Ubuntu VM 上运行一个独立的 varnish 实例,它基本上工作正常。该设置用于承担位于其他地方的旧 WordPress 服务器的负载。这很有效,但我很难清除内容。当谈论清除时,我的意思是使 URL 的缓存无效,以强制 varnish 从后端获取新版本(只是为了确保我看到了一些关于清除/禁止的刺激)。
我已经设置了一个用于清除的 ACL,据我所知,varnishlog 清除已被接受 - 在 WordPress 博客(W3TC 处理清除的地方)的一侧以及我尝试使用curl 清除的本地控制台的 es - X 清除http://url.to.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。
任何想法?
Thanks,
Frank
使用 vcl 4.1 在 Varnish 6 上得到相同的行为。
解决这个问题的唯一方法是显式定义 sub vcl_purge,如下所示:
sub vcl_purge {
set req.method = "GET";
set req.http.X-Purger = "Purged";
return (restart);
}
没有找到原因,这可能不完全是您想要的,因为清除后它将从后端获取内容而不等待客户端请求。
但仍然没有找到其他方法,这对我来说已经足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)