2012-01-05 44 views
0

Varnish腳本編寫對於vcl來說看起來相當健壯,但我還不知道如何讓它做我需要的。我運行來自相同代碼庫的各種網站,並且我想爲大多數目錄提供統一的清漆緩存,所以如何寫清漆腳本來做一些非常特別的事情

x.mysite.org/theme/something.gif和y.mysite.org/theme/something.gif應該不存儲相同的gif的兩個副本在清漆緩存

然而

x.mysite.org/file.php/1和y.mysite.org/file.php/1應根據有單獨的緩存網址。

另外mysite.org是一個有其自己的緩存整個其他網站。

我現在的方向是如下

sub vcl_fetch { 
    if (req.url ~ ".*\.org/file\.php") { 
    # do normal site specific caching 
    } elseif (req.url ~ "^+?\.mysite.org") { 
    # cache all found material in a base directory so everyone knows where to look 
    set req.url = regsub(req.url, "(.*\.org)(.*)", "base.mysite.org\2"); 
    } else { 
    # do normal site specific caching for base site 
    } 
} 

sub vcl_recv { 
    # do I need to do something here to look in base.mysite.org 
} 

我可以讓base.mysite.org如果需要一個真正的Apache提供服務的網站,這樣的要求可以在沒有緩存告吹。

我在寫道上,有什麼幫助。

回答

1

你應該正常化req.http.host而不是req.url,所以

sub vcl_fetch { 
    # if it starts with /theme or /static, or contains .gif,.png etc, 
    # then consider the host to the normalized/common host 
    if (req.url ~ "^/(theme|static)" || req.url ~ "\.(gif|png)") { 
    set req.http.host = "base.mysite.org"; 
    return (lookup); 
    } 
    # else, do non shared stuff here 
} 
0

默認光油會使用主機名+ URL,以獲取緩存對象的哈希值。這意味着,即使x.mysite.org/theme/something.gif和y.mysite.org/theme/something.gif指向完全相同的內容,Varnish也會將它們視爲兩個不同的緩存對象。讓他們指向同一個緩存對象的唯一方法是按照Ivy在其文章中解釋的那樣對主機名進行規範化。

'希望有幫助。

相關問題