2012-08-05 26 views
3

光油2.1:我正在嘗試使用http PURGE讓Varnish更新一個緩存的網址。如何讓Varnish清除URL的所有變體?

在測試時,我會得到一些看起來很奇怪的結果,直到我在文檔中讀到這一點:「如果緩存中存在多個相同URL的變體,則只會清除匹配的變體。同一頁的變種要求必須是這樣的:」

所以,現在如果我做這兩個命令:

curl -I http://example.com/my-url 
curl -X PURGE http://example.com/my-url 

我得到一個200吹掃響應。

如果我做這兩個:

curl -I http://example.com/my-url -H "Accept-Encoding: gzip" 
curl -X PURGE http://example.com/my-url -H "Accept-Encoding: gzip" 

我也得到沖洗過的200。

現在,如果我嘗試:

curl -I http://example.com/my-url -H "Accept-Encoding: deflate" 

我找回那種指示內容編碼頭:是 「text/html的;字符集= UTF-8」,它有年齡在緩存中。這似乎表明,「放氣」不被我的應用程序支持,這可能是正確的。

該頁面還有一個Age:標頭,表示它正在被緩存。

現在我該如何清除它? (我要求一個懸而未決的問題?)

所有這些嘗試返回「404未在緩存」:

curl -X PURGE http://example.com/my-url -H "Accept-Encoding: deflate" 
curl -X PURGE http://example.com/my-url -H "Accept-Encoding: text/html;charset=utf-8" 
curl -X PURGE http://example.com/my-url -H "Accept-Encoding: text/html" 

有沒有一種神奇的方式來清除所有URL的變種?

+0

請問您的VCL有兩個'vlc_hit'和'vlc_miss'條目? – favoretti 2012-08-05 20:01:27

+0

是的,它有兩個 – Mojo 2012-08-05 20:31:13

+0

恩,讓我換句話,請原諒我問一個不正確的問題。我的意思是詢問是否對hit和miss都有_purge_條目。 – favoretti 2012-08-05 20:35:35

回答

4

啊哈,通過應用一些谷歌福,我偶然在一個論壇帖子,這表明了以下幾點:

purge("req.url ~ ^" req.url "$"); 

即使用後面吹掃一個正則表達式,以處理所有Accept-Encoding頭。

此處瞭解詳情:http://www.gossamer-threads.com/lists/varnish/misc/15124

..這意味着你需要,雖然修改VCL。

+0

哦,很好地完成了先生!我要測試一下。改變VCL很好。將回報。 – Mojo 2012-08-06 18:27:03

+0

儘管這裏有一個問題...鏈接中的示例使用名爲「purge()」的調用,但我的VCL代碼看起來更像這裏的教程清除代碼:https://www.varnish-cache.org/docs/ trunk/tutorial/purging.html沒有清除()調用,只需將obj.ttl設置爲0. – Mojo 2012-08-06 20:33:28

+0

我的意思是https://www.varnish-cache.org/docs/2.1/tutorial/purging。涵蓋2.1,而不是3.0 – Mojo 2012-08-06 21:51:55

2

我覺得這是什麼ü需要:

acl purge { 
     "localhost"; 
     "192.168.55.0"/24; 
} 

sub vcl_recv { 
     # allow PURGE from localhost and 192.168.55... 

     if (req.request == "PURGE") { 
       if (!client.ip ~ purge) { 
         error 405 "Not allowed."; 
       } 
       return (lookup); 
     } 
} 

sub vcl_hit { 
     if (req.request == "PURGE") { 
       purge; 
       error 200 "Purged."; 
     } 
} 

sub vcl_miss { 
     if (req.request == "PURGE") { 
       purge; 
       error 200 "Purged."; 
     } 
}