Varnish
正如 Varnish 在其官方网站上提到的,它能让你的网站飞起来;事实也的确如此!Varnish 是一种开源网络应用程序加速器,运行于网络服务器软件之前。它必须配置在 80 端口上,这样每个请求都会进入该端口。
现在,Varnish 配置文件(称为 VCL 文件,带有 .vcl 扩展名)有一个后端定义。后端是指配置在另一个端口(比方说 8080)上的网络服务器(Apache 或 NGINX)。可以定义多个后端,Varnish 也会负责负载平衡。
当 Varnish 收到一个请求时,它会检查缓存中是否有与该请求相关的数据。如果它在缓存中找到了数据,就会将缓存数据返回给请求,而不会向网络服务器或后台发送任何请求。如果 Varnish 在缓存中找不到任何数据,它就会向网络服务器发送请求并请求数据。当从网络服务器收到数据时,它会首先缓存这些数据,然后将其发送回请求。
从前面的讨论中可以清楚地看到,如果 Varnish 在缓存中找到了数据,就不需要向网络服务器发出请求,因此也不需要在缓存中进行处理,响应会非常快地发送回来。
Varnish 还提供负载平衡和健康检查等功能。此外,Varnish 不支持 SSL 和 Cookie。如果 Varnish 从网络服务器或后台接收 cookie,则不会缓存该页面。有不同的方法可以轻松克服这些问题。
理论知识我们已经讲得够多了;现在,让我们通过以下步骤在 Debian/Ubuntu 服务器上安装 Varnish:
-
首先,在
sources.list
文件中添加 Varnish 软件源。在文件中加入以下一行:deb https://repo.varnish-cache.org/debian/ Jessie varnish-4.1
-
然后,发出以下命令更新软件源:
sudo apt-get update
-
现在,请执行以下命令:
sudo apt-get install varnish
-
这将下载并安装 Varnish。现在,要做的第一件事就是配置 Varnish 监听 80 端口,并让网络服务器监听另一个端口,如 8080。我们将在这里使用 NGINX 进行配置。
-
现在,打开位于
/etc/default/varnish
的 Varnish 配置文件,并修改配置文件,使其与下面的代码相似:DAEMON_OPS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,256m"
-
保存文件并在终端发出以下命令重启 Varnish:
sudo service varnish restart
-
现在,我们的 Varnish 运行在 80 端口上。让我们让 NGINX 在 8080 端口上运行。编辑应用程序的 NGINX vhost 文件,将监听端口从 80 改为 8080,如下所示:
listen 8080;
-
现在,通过在终端中发出以下命令来重新启动 NGINX:
sudo service nginx restart
-
下一步是配置 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
上述命令将显示类似于以下屏幕截图的会话:

从前面的截图中可以看到,它显示了非常有用的信息,如运行时间和开始时的请求数、缓存命中率、缓存未命中率、所有后端、后端重用率等。我们可以利用这些信息来调整 Varnish,使其达到最佳性能。
完整的 Varnish 配置超出了本书的范围,但是可以在 Varnish 官方网站 https://www.varnish-cache.org 上找到很好的文档。 |