Reverse-Proxy
清漆僅記憶體來自單個會話的資產
目前我設法將清漆配置為記憶體來自 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
功能(前提是您不需要它用於其他任何事情),希望您能看到改進。!