我对使用 Varnish 时的最佳实践有点困惑:我看到很多我知道他们正在使用 Varnish 的网站,这些网站都Cache-Control: no-store, no-cache, must-revalidate
激活了 HTTP 标头。他们的网站内容很长一段时间都没有改变 - 那么他们为什么不使用浏览器缓存呢?也许他们想要更好地控制内容,如果他们需要快速更改某些内容,否则浏览器缓存中的内容会过时?
所以,基本上我想知道我是否应该利用清漆和浏览器缓存,或者只为网站提供清漆,它提供的内容不会改变?这里有什么规则,什么是“最佳实践”?通常我会选择 Varnish 和浏览器缓存,但我看到的上述网站让我对此感到困惑。
你应该同时使用它们,它们是两个完全不同的东西。
对于缓存条目/不同的缓存策略,这两个缓存可以具有不同的生命周期,这很好。这取决于您正在缓存的资源的性质。
页面 (HTML)
仅仅因为您
Cache-Control: no-store, no-cache, must-revalidate
在检查网站时看到,例如 viacurl
,并不意味着没有 Varnish 并且它不会缓存内容。以 Magento 2 为例。Magento 本身发送:
这就是Varnish所看到的。因此该页面将被 Varnish 适当地缓存 1 天。但是,在 Magento 2 的 Varnish VCL 中,它会
Cache-Control
在退出时进行修改,以确保浏览器根本不缓存。因此,您将看到以下响应:为什么会这样:
静态资产
在浏览器中
您通常希望通过浏览器缓存静态资产,这就是为什么对于此类资源,您会看到 Far Future Expires 标头,如下所示:
在清漆
对于这些资源,很多人喜欢配置 Varnish 不缓存它们。这是因为 PHP 没有繁重的工作来通过服务器发出这些文件,因此将它们缓存在服务器上毫无意义。特别是考虑到 Varnish 缓存默认使用 RAM 存储后端(尽管您可以为静态文件分区缓存)。
“也许他们想要更好地控制内容,如果他们需要快速更改某些内容,否则浏览器缓存中的内容会过时?”
你在那里回答了你自己的问题;)
发布新内容以使您不一定可以控制的缓存失效时会很麻烦,并且快速使旧缓存失效对于快速推出新内容是一个很大的好处。如果您不想担心或不必担心,您可以让浏览器缓存以减少基础架构的负载。