Reverse-Proxy

清漆僅記憶體來自單個會話的資產

  • June 5, 2013

目前我設法將清漆配置為記憶體來自 1 個使用者的項目,但是當第二個使用者進入清漆時,我會從 Apache 獲取另一個資產。

如何記憶體可從多個使用者訪問的 magento(css、js、圖像 pdf 等)後面的靜態資產?

在 vcl_recv 上,我配置了:

  if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
       unset req.http.Https;
       unset req.http.Cookie;
       return (lookup);
   }

在 vcl_fetch 上:

if (beresp.status == 200 || beresp.status == 301 || beresp.status == 404) {
if (beresp.http.Content-Type ~ "text/html" || beresp.http.Content-Type ~ "text/xml") 
{
   # do something
} else {
   unset beresp.http.expires;
   unset beresp.http.set-cookie;
   set beresp.ttl = 300h;
}

我懷疑這與使用某種客戶端指紋儲存記憶體的 vcl_hash 有關。

有沒有辦法操縱它只針對某些資產類型的散列方式?

編輯 1:完整配置: http: //pastebin.com/mzSVpEqN

我找到了解決這個問題的方法。

Varnish 為每個特定的 User-Agent 儲存不同的記憶體頁面。我發現了以下技術來規範化使用者代理(https://www.varnish-cache.org/trac/wiki/VCLExampleNormalizeUserAgent

我只是將所有東西都放入 1 個籃子,然後看到命中數大幅增加。

在 vcl_recv 上:

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
    set req.http.user-agent = "Mozilla";
    unset req.http.Https;
    unset req.http.cookie;
    return (lookup);
}

如評論中所述,註釋掉該vcl_hash功能(前提是您不需要它用於其他任何事情),希望您能看到改進。

引用自:https://serverfault.com/questions/365056