
我剛開始閱讀有關 Varnish 的文章,並正在考慮將其用作我的網頁伺服器的前端。我的網站伺服器上有多個網域,當使用相同的查詢字串時,它們會取得相同的內容。假設一位客戶來訪:
http://domain1.com/script.php?string1=abc&string2=123
後來,又有人來訪:
http://domain2.com/script.php?string1=abc&string2=123
Varnish 會快取第一次存取的結果並將其用於第二個用戶端嗎?謝謝!
編輯:經過更多閱讀後,聽起來以下內容可能有效:
sub vcl_hash {
set req.hash += req.url;
return (hash);
}
因此,它沒有將 http.host 變數加入到哈希中,而是忽略它。
答案1
您可以將其配置為這樣做。預設情況下,它不會(也不應該)。
我的網站有很多主機名,如何防止它們增加快取?
您可以透過標準化所有主機名稱的「Host」標頭來做到這一點。這是一個 VCL 範例:
if (req.http.host ~ "^(www.)?example.com") { set req.http.host = "example.com"; }
答案2
我的虛擬機器上有 3 個網域,我正在使用 Nginx 和 Varnish,目前我處於預生產配置中,我正在做的事情是:
NGINX:80 ==> VARNISH:8080 ==> NGINX:8081
如果網域需要 Varnish,我將使用 Nginx:80 作為代理,如果不需要,我使用 FastCGI 東西。在這個例子中,非 Varnish 網站不受 Varnish 的影響。它看起來很愚蠢,但很有效;-)並且我的客戶沒有一個抱怨(但是...)。