Varnish purges 缓存清除 教程

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 <configname> <filename>
vcl.inline <configname> <quoted_VCLstring>
vcl.use <configname>
vcl.discard <configname>
vcl.list
vcl.show <configname>
param.show [-l] [<param>]
param.set <param> <value>
purge.url <regexp>
purge <field> <operator> <arg> [&& <field> <oper> <arg>]...
purge.list

3.2 help中和purge有关的命令有三个,其中purge.list是查看purge的列表,能执行purge的是purge.url和purge两个命令。
3.2.1 purge.url命令它只支持url的purge,如清除http://blog.izhoufeng.com/test.html。

[root@varnish2 varnish]# telnet 192.168.1.185 3500
Trying 192.168.1.185...
Connected to varnish1 (192.168.1.185).
Escape character is '^]'.
200 154
-----------------------------
Varnish HTTP accelerator CLI.
-----------------------------
Type 'help' for command list.
Type 'quit' to close CLI session.

purge.url test.html
200 0

除用CLI接口外也可以用:

/usr/local/varnish-2.1/bin/varnishadm -T 192.168.1.185:3500 purge.url ^test.html$

3.2.2 purge命令则很灵活,请看列子:
清除http://izhoufeng.com/somedirectory/和目录下的所有页面。

purge req.http.host == izhoufeng.com && req.url ~ ^/somedirectory/.*$
or
purge req.url ~ ^/somedirectory/ && req.http.host == izhoufeng.com

清除所有带“Cache-Control: max-age=3600”的对象。

purge obj.http.Cache-Control ~ max-age=3600
or
purge obj.http.Cache-Control ~ max-age ?= ?3600[^0-9]

4、对于大量清除,需要程序接口来做。
4.1 通过HTTP的PURGE的接口。
<span style="color: rgb(0, 0, 0); font-weight: bold;"><?php</span>
<span style="color: rgb(102, 102, 102); font-style: italic;">//刷新varnish缓存的函数,$ip为varnish服务器IP地址, $host为要刷新的网站域名,$url为要刷新的不含域名的URL地址</span>
<span style="color: rgb(0, 0, 0); font-weight: bold;">function</span> varnish_purge<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 136);">$ip</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$host</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$url</span><span style="color: rgb(0, 153, 0);">)</span>

(0)

相关推荐

  • 饿了么清除图片缓存怎么删除? 饿了么清除缓存的教程

    饿了么app中图片缓存有很多,想要清理图片缓存,该怎么清理呢?下面我们就来看看详细的教程. 1.打开手机后,在手机桌面上找到饿了么软件图标,并点击打开,如下图所示. 2.在打开的饿了么首界面里直接点击 ...

  • 天天模拟器怎么清理缓存?靠谱天天模拟器电脑版清除缓存数据教程

    天天模拟器是一款可以让安卓应用程序在windows系统上运行的安卓模拟器,天天模拟器在长时间使用之后会产生大量的缓存,如果不及时清理缓存垃圾,就会占用我们电脑的存储空间,那我们该怎么清理这些缓存呢?下 ...

  • safari浏览器怎么清除缓存 苹果手机safari浏览器清除缓存图文教程

    iphone中的safari浏览器用久了会积攒很多缓存垃圾,今天小编为大家介绍苹果safari浏览器清除缓存图文教程,一起来了解下吧! safari浏览器怎么清除缓存? 第一步,在设置应用中,点击进入 ...

  • 网易云音乐怎么自动清除缓存 网易云音乐自动清除缓存方法教程

    网易云音乐自动清除缓存方法教程 首先我们找到桌面上的网易云音乐. 打开网易云音乐APP首页,点击左侧菜单按钮 点击左下角[设置] 点击[缓存设置] 把[自动清理换成]勾选上就可以了.

  • 芒果tv离线缓存在哪个文件夹?芒果tv离线缓存设置教程

    很多湖南卫视播出的节目只能在芒果tv上观看,一般不论是wifi还是移动网络用手机看视频的时候总会有卡的时候,所以大家一般都会选择离线缓存之后观看,那么芒果tv离线缓存在哪里?芒果tv怎么传离线缓存?想 ...

  • 抖音内存怎么越来越大? 抖音清理缓存的教程

    经常玩抖音,长时间不清理缓存会影响手机运行速度,该怎么清理缓存呢?下面我们就来看看详细的教程. 1.启动手机上的抖音app,如下图所示 2.进入首页,点击我的,如下图所示 3.在我的界面点击上方的三个 ...

  • 云闪付App中怎么将视频缓存清除

    今天,小编给大家介绍云闪付App中将视频缓存清除的方法,希望对大家有所帮助.具体如下:1. 首先,请大家在自己的手机中找到[网易云音乐]图标,点击进入主界面,然后点击左上方的[三]菜单按钮.2. 第二 ...

  • 支付宝中如何将缓存清除

    今天,小编给大家介绍支付宝中将缓存清除的方法,希望对大家有所帮助.具体如下:1. 第一步,请大家在自己的手机中找到[支付宝]图标,点击进入主界面.2. 第二步,接下来,请点击屏幕右下方的[我的]按钮. ...

  • 怎么将手机微博app内的缓存清除

    当我们在使用手机的时候,可以下载微博app来查看实时热点或与好友互动,随着我们使用时间的增加,会导致缓存增多,使手机变卡,那么如何清除微博内的缓存呢?接下来就由小编来告诉大家.具体如下:1. 第一步, ...