Varnish Cache(反向代理缓存):工作原理及如何使用

目录

缓存是 Web 性能优化的支柱之一,是使网站加载速度更快的一组技术。如果没有缓存系统,任何网站都不能称自己为优化网站。

乍一看,缓存似乎是一个非常复杂的话题:我们不会撒谎,大多数时候都是这样!但好消息是,我们是来帮忙的。?

所有缓存系统都遵循相同的原则:

缓存是将数据存储在临时存储单元(称为缓存)中的过程。

目前为止,一切都好。当我们尝试定义缓存过程正在处理的存储单元时,复杂性就会出现。缓存可以采取多种形式,并利用我们网站的不同方面。

以下是我们可以识别的不同类型缓存的快速列表:

  • 页面缓存:它发生在服务器上并存储页面的整个 HTML(就像 WP Rocket 所做的那样);
  • 浏览器缓存:它继续存储 HTML,但发生在浏览器上;
  • Object cache:存储数据库查询;
  • 字节码缓存:它是一个 PHP 扩展,将预编译好的脚本字节码存储在内存中;
  • CDN 缓存:它发生在 CDN 端,存储 HTML 和所有其他静态文件(图像、CSS 和 JS);
  • 反向代理缓存:它发生在服务器端,并将其所有响应存储给客户端的服务器。

在本文中,我们将重点介绍最后一种类型的缓存,特别是最流行的 HTTP 反向代理之一:反向代理(Varnish) 缓存。


了解 HTTP 反向代理

一般来说,“代理”是放置在 Internet 和用户(或用户网络,如 LAN)之间的服务器。代理服务器用于按照特定规则过滤用户发送到特定网页的请求。

代理服务器(也称为转发代理)的一个典型示例是由几家公司实施的代理服务器,这些公司希望阻止员工访问 Internet(即社交媒体网站)上的某些内容。

另一方面,反向代理是放置在 Internet 和公司 Web 服务器之间的服务器。反向代理是定向到公司网站的所有请求的入口点:其范围是在这些请求到达网站之前对其进行过滤。

市场上最常用的反向代理是:

其中一些,如 Apache httpd、NGINX、Lighttpd 和 IIS 也是 Web 服务器,但它们可以充当反向代理。

为什么要在您的网站上使用反向代理?

答案很简单:使用反向代理有几个优点。让我们简要地看一下它们:

  • 匿名化:如果有人扫描指向反向代理的域,他们将获得有关代理的信息,而不是有关其背后的实际 Web 服务器的信息;
  • 安全性:遵循上述一点,受反向代理保护的网站可以更容易地避免恶意攻击;
  • SSL 下载或 SSL 终止:反向代理可以吸收所有 HTTPS 请求,并与用户的浏览器执行 SSL 握手。然后,这些请求将转换为 HTTP 并发送到 Web 服务器。通过这种方式,您可以将服务器从 SSL 握手中解放出来,并且可以处理其他重要操作(例如下载其余的网页内容);
  • 集中管理多个 SSL 证书:使用反向代理,您可以将网页中使用的所有 SSL 证书放在一个服务器中;
  • GZIP 压缩:您可以在 Web 服务器上配置 GZIP 模式,以便它可以压缩您的文件大小并更快地传输它们;
  • 最后但并非最不重要的一点是缓存!如果您让反向代理临时存储页面的静态内容,则每当有新请求请求时都会提供静态内容:不会对源服务器进行任何调用,并且您的页面加载速度会更快。

什么是 Varnish 缓存?

现在您知道什么是反向代理,您可以深入研究 Varnish Cache 的魔力了!

Varnish 充当缓存 HTTP 反向代理,有时您还可以看到它被定义为前端加速器。它不是一个独立的解决方案,因为它需要一个专用的 Web 服务器来依赖,例如 NGINX 或 Apache。

您可以使用 Varnish 缓存动态和静态内容:这是一种有效的解决方案,不仅可以提高您的网站速度,还可以提高服务器性能。根据其开发人员的说法:

“它可以将交付速度提高 300 到 1000 倍,具体取决于您的架构。”

使用 Varnish Cache 有什么好处?

如前所述,Varnish 提供的第一个好处是您的网站和服务器的速度提升。

发生这种情况要归功于一系列因素:

  • 在交付对象时,缓存服务器比源服务器更快,因为第一个服务器上的工作负载强度较低且变化较小。
  • 缓存服务器提供所有不经常更改的资源,如 CSS 和 JavaScript 文件。这减轻了源服务器的负担,源服务器可以专注于更快地呈现页面,因为它不必在每次重新加载时都提供静态内容。
  • 首字节时间 (TTFB) 减少,因为后端服务器数据库的处理时间较短。
  • 您可以将 Varnish 用作高可用性环境的一部分,即使在 Web 服务器停机时也能提供缓存内容(更多内容见下文)。

Varnish Cache 是如何工作的?

Varnish 会在所有入站请求到达您的 Web 服务器后端之前对其进行处理:它的缓存为所有 Web 流量提供服务,并且默认情况下,每两分钟刷新一次(或者如果您决定,则使用不同的生命周期)。

how-varnish-works
Varnish Cache 功能

如果请求没有缓存,Varnish 会将请求转发到 Web 服务器的后端并缓存结果,正如我们在一般反向代理段落中已经看到的那样。

然后将缓存的请求存储在内存中:从这一刻起,检索它们并将其交付给客户端的速度将大大加快。

为了指定配置、缓存策略和其他规则,Varnish 使用一种称为 VCL (Varnish Configuration Language) 的语言。

通过此语言及其更改,您可以以不同的方式处理每个请求。例如,您可以选择将特定请求转发到特定后端,也可以要求 Varnish 根据入站请求或其输出的属性执行不同的操作。

Varnish 的另一个很酷的行为是,由于有一个称为后端轮询的内置工具,即使 Web 服务器不可用,也可以继续提供缓存的内容。

后端轮询以您可以灵活配置的频率询问服务器:如果 Varnish 检测到停机,它将在称为宽限期(也是可定制的)的时间段内继续提供缓存的内容。

有关配置命令的更多信息,请参阅 Varnish 文档。

如何在您的 WordPress 网站上使用 Varnish Cache?

数以百万计的 WordPress 网站正在使用 Varnish Cache。

在您的 Web 服务器上安装并配置 Varnish 后,您就可以指示 WordPress 与它交互并在缓存内容发生变化时清除 Varnish 缓存。

为此,您可以使用 WordPress 插件:安装最多(维护更好)的插件之一是 Proxy Cache Purge。

但是还有其他几个插件具有与 Varnish 交互并使缓存清除更容易的功能。

Varnish-Add-On-WP-Rocket
WP Rocket 的 Varnish Add-On

例如,WP Rocket 包含一个 Varnish 扩展,可让您在 WP Rocket 的同时刷新 Varnish 缓存。



评论

发表回复

必填项已用 * 标注