Varnish purges 緩衝清除 教程

來源:互聯網
上載者:User

 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> 

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。