时间:2023-06-02 16:16:41 来源: 人气:
Varnish的缓存清除非常复杂。无论是Varnish的清除方式还是清除时候使用的语法规则等,都是比较复杂。为了理解他,我花费了不少时间,现在我很高兴我知道怎么来解释给大家听了。,1、Varnish有两种方式来清除缓存,其中一种方式是通过命中对象的单一变体,所以在他命中一个没有压缩的对象的时候他不能清除一个已经压缩的对象。这个方式也就是强制过期(forced expiry),他是通过设置你想清除的对象的TTL为0去强制它过期。VCL设置如下:,acl purge { "localhost"; "192.0.2.14"; } sub vcl_recv { if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } lookup; } } sub vcl_hit { if (req.request == "PURGE") { set obj.ttl = 0s; error 200 "Purged."; } } sub vcl_miss { if (req.request == "PURGE") { error 404 "Not in cache."; } },2、另外一种方式是使用purge_url,VCL设置如下:,acl purge { "localhost"; "192.0.2.14"; } sub vcl_recv { if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } purge("req.url == " req.url); },通过以上在VCL文件的设置,我们通过HTTP来执行PURGE。这意味着你现在发送了一个:,PURGE / HTTP/1.0 Host: www.example.com,通过80端口给了Varnish。但是,这种执行PURGE的方式不支持正则。如果你想支持,可以按照这样来设置VCL:,acl purge { "localhost"; "192.0.2.14"; } sub vcl_recv { if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } purge("req.url ~ " req.url); },3、对于purge的方式,除了像上边第2点那样设置VCL来允许PURGE外,其实我们还可以通过Varnish的管理端口发送灵活的PURGE命令来清除缓存。 3.1 首先让我们来看看管理端口的help(Varnish版本2.1),[root@varnish4 varnish]# telnet 192.168.1.185 3500 Trying 192.168.1.185... Connected to 192.168.1.185 (192.168.1.185). Escape character is ^]. 200 154 ----------------------------- Varnish HTTP accelerator CLI. ----------------------------- Type help for command list. Type quit to close CLI session. help 200 377 help [command] ping [timestamp] auth response quit banner status start stop stats vcl.load