Varnish和WordPress,是否可以在没有外部插件的情况下进行真正的缓存?

时间:2018-10-11 09:52:16

标签: varnish

在Varnish Cache世界中,这听起来可能是一个新手问题,但是为什么在WordPress中似乎需要安装外部缓存插件才能完全缓存?

通过curl -I命令Varnish正确加载了网站:

HTTP/1.1 200 OK
Server: nginx/1.11.12
Date: Thu, 11 Oct 2018 09:39:07 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: max-age=0, public
Expires: Thu, 11 Oct 2018 09:39:07 GMT
Vary: Accept-Encoding
X-Varnish: 19575855
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS
Accept-Ranges: bytes
Pragma: public
Cache-Control: public
Vary: Accept-Encoding

使用此配置,默认情况下不会缓存WordPress安装。 经过测试多个缓存插件-有些无法运行,或者没有复杂的配置无法运行-我发现Swift Performance(精简版)只需激活Cache选项,即可真正发挥所有优势,在这里我可以看到varnish可以完全正常工作压力测试结果很好。

对于在单个环境中的单个站点来说,这是可以的,但是从共享托管的角度来看,当每个客户都可以拥有自己的WP(或其他CMS)安装时可能会出现问题。

因此,关键在于,如果不安装第三方缓存(和复杂的)插件,就无法从Varnish中获得全部缓存优势?为什么不默认全部缓存?

我们非常欢迎您提出任何建议和帮助。

1 个答案:

答案 0 :(得分:1)

  

使用此配置,默认情况下不会缓存WordPress安装

默认情况下,如果您既未在Wordpress或Varnish配置中均未进行任何更改,则事情将以缓存 120秒的方式协同工作。因此可以进行真正的缓存,但这将是短暂的缓存,而效率极低。

您的特定标头指示不应进行缓存。它们要么是由Varnish本身发送的(我们都对复制粘贴的东西感到内without,却没有考虑它的作用),或者是一个Wordpress插件(通常是坏的,而不是好的)。不知道您的特定配置,很难解密任何内容。

Varnish是透明的HTTP缓存代理。这意味着,默认情况下将使用HTTP标头(由Cache-Control之类的后端(Wordpress)发送)来决定是否可以缓存资源以及如何缓存长。

事实上,除了某些特定区域(错误页面,登录POST提交等)以外,Wordpress不会发送与缓存相关的标头。

here中概述的标准方法是配置具有最高TTL的Varnish。这样:

  

当您更新文章内容或更改主题时,清漆不知道。解决此问题的典型方法是使用缓存无效化插件(例如Varnish HTTP Purge)。

当内容更改时,必须从插件中清除缓存。

假设您更新了Wordpress页面的文本。您之前曾访问过同一页面,该页面已进入Varnish缓存进行存储。下次访问时会发生什么情况,那就是Varnish将为所有接下来的访问者提供相同的,现在为陈旧的内容。

Varnish的Wordpress插件(如Varnish HTTP Purge)将以某种方式挂接到Wordpress中,以指示Varnish在页面更新时清除缓存。这是他们的主要目的。

这种方法(高TTL和高速缓存清除)是Varnish的实际标准。由于Varnish没有有关何时更新内容的信息,因此清除缓存的内部工作在于应用程序本身。缓存清除功能既可以捆绑到CMS代码本身中(例如,Magento 2可以直接使用,没有任何额外的插件),也可以捆绑到Wordpress插件中。