根据页面请求清除 Varnish

根据页面请求清除 Varnish

我对 varnish 没有任何经验。我想设置 varnish 来做一些非常基本的事情:我有两个页面

http://mysite.com/
http://mysite.com/additem

我想缓存http://mysite.com/additem10 分钟和http://mysite.com/1 分钟,但每当http://mysite.com/additem访问时,我都想清除缓存http://mysite.com/。有什么帮助吗?

答案1

我记得有一个 CLI 程序(purge),你可以从http://mysite.com/additem或者使用 curl 发送清除指令(作为 HTTP 动词)例如

curl -X PURGE http://mysite.com/

但这假设你已经有脚本了http://mysite.com/additem

我认为可以在 VCL 处理程序中调用清除http://mysite.com/additem

sub vcl_recv {
   if (req.url ~ "^http://mysite.com/additem") {
      purge("req.url == http://mysite.com/");
   }
}

(未经测试)

答案2

第1部分:

此命令将清理(清除)子文件夹(例如)

varnishadm -S /etc/varnish/secret -T localhost:6082 "ban req.http.host == mysite.com && req.url ~ ^/fold/.*$"

对于您的域根目录,这将起作用*

varnishadm -S /etc/varnish/secret -T localhost:6082 "ban req.http.host == mysite.com && req.url ~ ^/.*$"

*注意:需要测试上述操作是否清除子文件夹(递归)

第 2 部分:您负责服务器和不是是否允许任何其他用户使用它?系统命令在 PHP 中?如果是的,无论何时运行该命令都应该很容易http://mysite.com/additem被访问。

上述命令在 CLI 中有效,尚未通过其他方式测试。

相关内容