2013-07-18 65 views
1

目前我在運行約30-40個不同網站的服務器上運行清漆。所有這些網站都使用相同的庫來處理請求(每個網站都有它自己的域)。但是其中一些網站非常簡單,可以完全緩存。我想要做的是在項目/網站(某些標題)中啓用一個標誌,告訴varnish緩存一次交付的請求。這樣的結構可能的,因爲我不想要編輯的VCL每一個可以完全高速緩存的項目,並添加一個條目,以vcl_fetch像:基於標題的清漆緩存

if (req.http.host ~ "<website>") 
{ 
    unset req.http.cookie; 
    return (lookup) 
} 

有沒有做到這一點正確的方法是什麼?我確實看過了Varnish流程圖,但不能提出一個好的解決方案。

在此先感謝!

回答

1

嗯,我剛開始使用清漆和喜歡這個主意。因爲我有麻煩,我只想緩存幾個域,並且不想一直改變vcl。

我看着設定一個「特殊」的標題,然後讓漆做的魔力。

但後來我看着文檔,並有更多的簡便方法。

header('Cache-Control: public, max-age=10'); 

這樣清漆緩存內容10秒。所以如果你想永遠緩存它,那麼你會靠近一個很高的整數。

// Caches the content for a year, if my calculations are right :P 
header('Cache-Control: public, max-age=' . (60 * 60 * 24 * 365)); 
1

我希望這可以幫助你。在下面的例子中,自定義標題被用作條件。

sub vcl_fetch { 
    if (req.http.Custom-Header == "www.site.com" { 
     set beresp.ttl = [...] 
     [...] 
    } 
    elsif (req.http.Custom-Header == "www.site2.com" { 
     set beresp.ttl = [...] 
     } 
     else { 
     [...] 
     } 
     return(deliver); 
} 
0

光油,在默認情況下,在不改變任何VCL,讀取HTTP由後端(緩存控制,過期等)返回1.1標準緩存頭並緩存根據這些標頭的對象。因此,只要您在vcl_recv中使用return (lookup);,Varnish就已經被配置爲執行您想要的操作。

1

光油將信守在響應頭後端表達的TTL。 如果您希望緩存站點X,請使用mod_expires(或類似)並從後端正確設置TTL。如果您希望站點Y不被緩存,請設置Cache-Control: s-maxage=0,並且Varnish不會緩存它。

如果你必須有一個特定的響應頭,這裏是一些例子VCL:

sub vcl_fetch { 
     if (beresp.http.x-do-not-cache) { 
      set beresp.ttl = 0s; 
     } 
    } 

請注意,我不這樣做()返回這裏。通過設置TTL並通過默認的VCL Varnish將自行處理。