Varnish

正如 Varnish 在其官方网站上提到的,它能让你的网站飞起来;事实也的确如此!Varnish 是一种开源网络应用程序加速器,运行于网络服务器软件之前。它必须配置在 80 端口上,这样每个请求都会进入该端口。

现在,Varnish 配置文件(称为 VCL 文件,带有 .vcl 扩展名)有一个后端定义。后端是指配置在另一个端口(比方说 8080)上的网络服务器(Apache 或 NGINX)。可以定义多个后端,Varnish 也会负责负载平衡。

当 Varnish 收到一个请求时,它会检查缓存中是否有与该请求相关的数据。如果它在缓存中找到了数据,就会将缓存数据返回给请求,而不会向网络服务器或后台发送任何请求。如果 Varnish 在缓存中找不到任何数据,它就会向网络服务器发送请求并请求数据。当从网络服务器收到数据时,它会首先缓存这些数据,然后将其发送回请求。

从前面的讨论中可以清楚地看到,如果 Varnish 在缓存中找到了数据,就不需要向网络服务器发出请求,因此也不需要在缓存中进行处理,响应会非常快地发送回来。

Varnish 还提供负载平衡和健康检查等功能。此外,Varnish 不支持 SSL 和 Cookie。如果 Varnish 从网络服务器或后台接收 cookie,则不会缓存该页面。有不同的方法可以轻松克服这些问题。

理论知识我们已经讲得够多了;现在,让我们通过以下步骤在 Debian/Ubuntu 服务器上安装 Varnish:

  1. 首先,在 sources.list 文件中添加 Varnish 软件源。在文件中加入以下一行:

    deb https://repo.varnish-cache.org/debian/ Jessie varnish-4.1
  2. 然后,发出以下命令更新软件源:

    sudo apt-get update
  3. 现在,请执行以下命令:

    sudo apt-get install varnish
  4. 这将下载并安装 Varnish。现在,要做的第一件事就是配置 Varnish 监听 80 端口,并让网络服务器监听另一个端口,如 8080。我们将在这里使用 NGINX 进行配置。

  5. 现在,打开位于 /etc/default/varnish 的 Varnish 配置文件,并修改配置文件,使其与下面的代码相似:

    DAEMON_OPS="-a :80 \
    -T localhost:6082 \
    -f /etc/varnish/default.vcl \
    -S /etc/varnish/secret \
    -s malloc,256m"
  6. 保存文件并在终端发出以下命令重启 Varnish:

    sudo service varnish restart
  7. 现在,我们的 Varnish 运行在 80 端口上。让我们让 NGINX 在 8080 端口上运行。编辑应用程序的 NGINX vhost 文件,将监听端口从 80 改为 8080,如下所示:

    listen 8080;
  8. 现在,通过在终端中发出以下命令来重新启动 NGINX:

    sudo service nginx restart
  9. 下一步是配置 Varnish VCL 文件,并添加一个与我们 8080 端口的后端通信的后端。编辑位于 /etc/varnish/default.vcl 的 Varnish VCL 文件,如下所示:

    backend default {
        .host = "127.0.0.1";
        .port = "8080";
    }

在前面的配置中,我们的后端主机位于运行 Varnish 的同一台服务器上,因此我们输入了本地 IP。在这种情况下,我们也可以输入本地主机。但如果后端运行在远程主机或其他服务器上,则应输入该服务器的 IP。

现在,我们完成了 Varnish 和网络服务器的配置。重启 Varnish 和 NGINX。打开浏览器,输入服务器的 IP 或主机名。第一次响应可能看起来很慢,这是因为 Varnish 正在从后端获取数据,然后将其缓存起来,但随后的其他响应会非常快,因为 Varnish 缓存了这些数据,现在无需与后端通信即可发回缓存数据。

Varnish 提供了一个工具,让我们可以轻松监控 Varnish 缓存状态。这是一个实时工具,会实时更新内容。该工具名为 varnishstat。要启动 varnishstat,只需在终端中发出以下命令:

varnishstat

上述命令将显示类似于以下屏幕截图的会话:

image 2023 11 05 13 25 59 390

从前面的截图中可以看到,它显示了非常有用的信息,如运行时间和开始时的请求数、缓存命中率、缓存未命中率、所有后端、后端重用率等。我们可以利用这些信息来调整 Varnish,使其达到最佳性能。

完整的 Varnish 配置超出了本书的范围,但是可以在 Varnish 官方网站 https://www.varnish-cache.org 上找到很好的文档。