Http

同時使用 Varnish 和瀏覽器記憶體是否有意義?

  • August 13, 2018

我對使用 Varnish 時的最佳實踐有點困惑:我看到很多我知道他們正在使用 Varnish 的網站,這些網站都Cache-Control: no-store, no-cache, must-revalidate啟動了 HTTP 標頭。他們的網站內容很長一段時間都沒有改變 - 那麼他們為什麼不使用瀏覽器記憶體呢?也許他們想要更好地控制內容,如果他們需要快速更改某些內容,否則瀏覽器記憶體中的內容會過時?

所以,基本上我想知道我是否應該利用清漆和瀏覽器記憶體,或者只為網站提供清漆,它提供的內容不會改變?這裡有什麼規則,什麼是“最佳實踐”?通常我會選擇 Varnish 和瀏覽器記憶體,但我看到的上述網站讓我對此感到困惑。

你應該同時使用它們,它們是兩個完全不同的東西。

  • 瀏覽器記憶體是您電腦中的記憶體。它的主要目的是保留頻寬,通過使用已經看到/下載的資產來減少延遲。
  • 清漆記憶體是託管網站的伺服器上的記憶體。其主要目的是減少伺服器因執行 CPU 密集型腳本(例如 PHP)而造成的壓力

對於記憶體條目/不同的記憶體策略,這兩個記憶體可以具有不同的生命週期,這很好。這取決於您正在記憶體的資源的性質。

頁面 (HTML)

僅僅因為您Cache-Control: no-store, no-cache, must-revalidate在檢查網站時看到,例如 via curl,並不意味著沒有 Varnish 並且它不會記憶體內容。

以 Magento 2 為例。Magento 本身發送:

Cache-Control: max-age=86400, public, s-maxage=86400

這就是Varnish所看到的。因此該頁面將被 Varnish 適當地記憶體 1 天。但是,在 Magento 2 的 Varnish VCL 中,它會Cache-Control在退出時進行修改,以確保瀏覽器根本不記憶體。因此,將看到以下響應:

Cache-Control: no-store, no-cache, must-revalidate, max-age=0

為什麼會這樣:

  • 為了確保消除 PHP 引擎的繁重工作,Varnish 記憶體頁面並從其記憶體中傳遞它們
  • 瀏覽器必須始終獲取新頁面(我們正在談論產品頁面等),因此它們根本不應該記憶體
  • 當產品頁面被更新(由管理員)時,Magento 會與 Varnish 對話以清除記憶體頁面。由於顯而易見的原因,它不能對瀏覽器記憶體說“從記憶體中刪除我”,這就是瀏覽器不應該記憶體頁面的原因

靜態資產

在瀏覽器中

您通常希望通過瀏覽器記憶體靜態資產,這就是為什麼對於此類資源,您會看到 Far Future Expires 標頭,如下所示:

Expires: Sat, 03 Aug 2019 14:24:01 GMT
Cache-Control: public, max-age=30672000

在清漆

對於這些資源,很多人喜歡配置 Varnish 不記憶體它們。這是因為 PHP 沒有繁重的工作來通過伺服器發出這些文件,因此將它們記憶體在伺服器上毫無意義。特別是考慮到 Varnish 記憶體預設使用 RAM 儲存後端(儘管您可以為靜態文件分區記憶體)。

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