如何在 Ubuntu 18.04 LTS 上使用 Varnish HTTP 缓存加速 Apache
Varnish 是一个专注于 HTTP 缓存的代理服务器。它被设计为 HTTP 加速器,可以充当您的 Web 服务器(Apache 或 Nginx)的反向代理。 Varnish 已被用于高知名度和高流量的网站,包括维基百科、卫报和纽约时报。
在本教程中,我们将向您展示如何安装和配置 Varnish HTTP 加速器作为 Apache Web 服务器的反向代理。真正的网络服务器 Apache 会运行在一个非标准的 HTTP 端口下(运行在 8080 端口)。 Varnish 将作为 HTTP 端口 80 上的反向代理运行。对于本指南,我们将使用 Ubuntu 18.04 LTS 服务器。
我们将要做什么
- 安装 Apache Web 服务器
- 更改 Apache 默认端口
- 安装清漆
- 配置清漆
- 测试设置
先决条件
- Ubuntu 18.04 LTS
- 根权限
第 1 步 - 安装 Apache Web 服务器
首先,安装 Apache Web 服务器。默认情况下,它在 Ubuntu 存储库中可用。
更新 Ubuntu 存储库,然后使用 apt 命令安装 Apache。
apt update
apt install -y apache2
安装完成后,启动 Apache 服务并使用以下 systemctl 命令使其在系统启动时自动运行。
systemctl start apache2
systemctl enable apache2

Apache Web 服务器已安装。
接下来,为了允许所有人访问 Web 服务器,我们必须在防火墙规则中允许 HTTP 和 HTTPS。默认情况下,Ubuntu 带有一个名为 UFW 的防火墙包。
使用以下 UFW 命令打开新的 SSH、HTTP 和 HTTPS 端口。
ufw allow ssh
ufw allow http
ufw allow https
现在启动防火墙服务并使其在系统启动时自动启动。
ufw enable
输入 y 并按 Enter 确认。

HTTP、HTTPS 和 SSH 的新端口已经打开,可以从网络外部访问。
如果要测试 Apache Web 服务器,可以使用 netstat 命令并确保 Apache 在端口 80 下运行。
netstat -plntu
或者您可以使用以下 curl 命令。
curl -I hakase-labs.co
您应该得到如下所示的结果。

第 2 步 - 更改 Apache 默认端口
在本教程中,我们将使用 Apache 作为后端服务器,它不会在标准 HTTP 端口 80 下运行。Apache Web 服务器将作为后端运行在端口 8080 上,而 Varnish 将使用标准 HTTP 端口 80 .
要更改默认的 apache 端口,我们需要编辑 apache 配置 ports.conf 和 sites-available 目录下的所有虚拟主机配置。
转到 Apache 配置目录。
cd /etc/apache2
在 Apache 配置 ports.conf 和 sites-available 目录下的所有虚拟主机文件中将端口 80 替换为 8080。我们可以通过运行以下 sed 命令来做到这一点。
sed -i -e 's/80/8080/g' ports.conf
sed -i -e 's/80/8080/g' sites-available/*
接下来,测试 Apache 配置并确保没有错误,然后重新启动 Apache 服务。
apachectl configtest
systemctl restart apache2

现在 Apache 在 HTTP 端口 8080 下运行,使用 netstat 命令检查它,如下所示。
netstat -plntu
确保你有如下结果。

所以你可以看到 Apache Web 服务器正在端口 8080 上运行。
第 3 步 - 安装 Varnish HTTP 加速器
在此步骤中,我们将从 Ubuntu 存储库安装 Varnish。对于本指南,我们将使用 Varnish 5.2。
使用以下 apt 命令安装清漆。
apt install -y varnish
安装完成后,启动 Varnish 并使其在系统启动时自动启动。
systemctl start varnish
systemctl enable varnish

Ubuntu 18.04系统上已经安装了varnish。
默认情况下,它在公共地址的端口 6081 和本地主机地址的 6082 端口下运行。使用下面的 netstat 命令检查它。
netstat -plntu
您将获得默认的清漆端口。

第 4 步 - 将 Varnish 配置为 Apache 的反向代理
在这一步中,我们将在 Apache Web 服务器的前端配置 Varnish。 Varnish 将在 http 端口 80 下运行,来自客户端的每个请求都将由它处理,然后再发送到在端口 8080 上运行的 Apache Web 服务器。
- 后端配置
进入varnish配置目录,备份默认文件default.vcl。
cd /etc/varnish/
cp default.vcl default.vcl.aseli
使用 vim 编辑器编辑清漆配置 default.vcl。
vim default.vcl
在第 16 行定义后端配置。我们设置的后端是 Apache,它在端口 8080 上运行。所以我们的 apache 设置的清漆配置应该如下:
backend default {
.host = "127.0.0.1";
.port = "8080";
}

保存并退出。
- 在端口 80 上运行 Varnish
接下来,我们需要更改默认清漆端口。 Varnish 默认端口为 6081 和 6082,我们需要将端口更改为 HTTP 端口 80(仅限公网地址)。
在 /etc/default 目录中编辑 varnish 参数配置。
cd /etc/default/
vim varnish
编辑 DAEMON_OPTS 行,将公共地址的默认端口 6081 更改为标准 HTTP 端口 80,如下所示。
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"

保存并退出。
接下来,我们需要编辑清漆服务文件varnish.service。转到 /lib/systemd/system 目录并使用 vim 编辑服务文件。
cd /lib/systemd/system/
vim varnish.service
在 ExecStart 行,如下更改清漆启动命令。
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
保存并退出。
重新加载 systemd 服务配置,然后重新启动 varnish。
systemctl daemon-reload
systemctl restart varnish
现在检查清漆并确保它在 HTTP 端口 80 上运行。
netstat -plntu

所以 Varnish 现在在 HTTP 端口 80 下运行,作为 Apache Web 服务器的前端,它在端口 8080 上。
第 5 步 - 测试
使用 curl 命令进行测试。
curl -I hakase-labs.co
确保获得如下所示的 HTTP 标头。

从网络浏览器检查,我的测试服务器的 URL 是 http://hakase-labs.co/。在此处选择您的服务器 URL。
我们仍然可以获得 Apache 内容。

使用 varnishncsa 命令检查清漆日志。
varnishncsa
我们只从 Apache 访问日志中获取日志。

Apache Web 服务器的 Varnish 安装和配置已经完成。
参考
- 清漆缓存
- Apache HTTPD