2012-04-07 96 views
4

所以我第一次使用清漆。我花了一段時間閱讀它的工作原理,但我無法弄清楚如何選擇性地清除緩存。清漆VCL有選擇地清除緩存

喜歡說我有這樣的

/?account=123&url=google.com 

和另一個URL像

/?account=123&url=stackoverflow.com 

我需要清除高速緩存,其中account=123

我只能弄清楚,上

發出吹掃/?帳戶= 123 & URL = stackoverflow.com

將只清洗其中的URL輸入URL以PURGE方法相匹配的高速緩存中。

任何幫助表示讚賞。

回答

4

因此,這是什麼工作。在清漆3中​​,選擇性清洗稱爲禁用。所以你需要使用

ban("obj.http.x-url ~ " + req.url); 
1

HTTP PURGE methos允許您清除特定的網址。

要使用正則表達式清除,必須使用telnet連接清除管理端口或使用命令行工具varnishadm。

通常可以通過

telnet localhost 6082 

使用telnet,連接到清漆服務器,你可以做清洗吹掃命令後也這樣做:

purge req.url ~ /?account=123 

以上將清除所有的URL匹配「/?帳戶= 123「

如果你想清除特定的頁面,就像你使用HTTP PURGE請求一樣,你必須使用雙等號而不是波浪號(〜)

purge req.url == /?account=123 

你也可以在你的域名清除整個域與

purge req.http.host == yourdomain.com 

或特定頁面:

purge req.http.host == yourdomain.com && req.url ~ /?account=123 
3

我們面臨着類似的問題,結束了使用使用HTTP請求清除內容單獨X-吹掃正則表達式的URL請求頭。

這裏的VCL我們使用來實現:

acl purge { 
    "localhost"; 
    "10.1.1.0"/28; 
} 

sub vcl_recv { 
    if (req.http.X-Purge-Regex-URL) { 
    if (!client.ip ~ purge) { 
     error 405 "Not allowed."; 
    } 
    ban_url(req.url); 
    error 200 "Banned URL"; 
    } 
} 

在你的情況下,我們可以使用清除curl -H "X-Purge-Regex-URL: True" --head "http://my.host.addr/?account=123"

請注意,ban_url()不關心HTTP主機的內容。它清除所有主機中的所有匹配URL。如果這不是你想要的,你應該使用ban()來禁止使用req.http.hostreq.url

0

我無漆的專家,但是這是對我工作:

acl purge { 
    "localhost"; 
    "10.1.1.0"; 
} 

sub vcl_recv { 
    if (req.http.X-Purge-Regex-URL) { 
    if (!client.ip ~ purge) { 
     error 405 "Not allowed."; 
    } 
    ban_url(req.url); 
    #error 200 "Banned URL"; 
    } 
} 

注意,我註釋掉error 200 "Banner URL" - 這在我的我的情況是造成問題。