网站搜索

如何在 CentOS/RHEL 8 上安装 Apache Varnish 缓存


Varnish Cache 是一款免费、开源、现代且高性能的 Web 应用程序加速器。它是一种快速反向 HTTP 代理,可通过将 Web 内容存储在服务器内存中(即缓存中)来缓存内容以提高 Web 服务器性能。它被配置为在源服务器(例如 Apache (HTTPD) Web 服务器)前面运行。

当客户端请求内容时,Varnish 接受 HTTP 请求,将请求发送到源服务器,缓存返回的对象,并回复客户端请求。下次客户端请求相同的内容时,Varnish 将从缓存中提供服务。这样,它可以减少未来等效请求的响应时间和网络带宽消耗。

Varnish 还可以用作 HTTP 请求路由器、Web 应用程序防火墙、负载均衡器等。它使用灵活的 Varnish 配置语言 (VCL) 进行配置,该语言可使用 Varnish 模块(也称为 VMODs)进行扩展>),支持Edge Side Includes (ESL)、Gzip 压缩和解压缩等等。

在本文中,您将了解如何在新的 CentOS/RHEL 8 服务器上安装 Apache HTTPD Web 服务器和 Varnish Cache 6,包括配置Varnish 在 HTTPD 服务器前面运行。

先决条件:

  • 安装有 CentOS 8 的服务器
  • 安装有 RHEL 8 并在系统上启用 Red Hat 订阅的服务器。

步骤1:在CentOS/RHEL 8上安装Apache Web服务器

1. 首先使用 DNF 命令更新系统上所有已安装的软件包,如下所示。

dnf update

2. 接下来,运行以下命令从 AppStream 存储库安装 Apache HTTP Web 服务器。

dnf install httpd

3. 安装完成后,立即使用 systemctl 命令启动 httpd 服务,使其在系统启动时自动启动,并检查其状态以确认其已启动并正在运行。

systemctl start httpd
systemctl enable httpd
systemctl status httpd

4.默认情况下CentOS/RHEL 8包含完全锁定的防火墙(运行firewall-cmd –state进行确认)。您必须在防火墙中开放对 HTTP 服务的访问,以允许用户访问通过 HTTP 运行的网站或应用程序,并重新加载firewalld 设置以应用新的更改。

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

步骤2:在CentOS/RHEL 8上安装Varnish Cache 6.4

5. 现在 Apache Web 服务器正在运行,您可以使用以下命令进一步在系统上安装 Varnish Cache

dnf module install varnish

6.安装成功后,您可以验证系统上安装的Varnish版本。

varnishd -V

7. 接下来,主可执行文件安装为 /usr/sbin/varnishd。此外,Varnish 配置文件存储在 /etc/varnish 目录下,其中:

  • /etc/varnish/default.vcl – 是使用 VCL 编写的主要 varnish 配置文件。
  • /etc/varnish/secret – 是 varnish 秘密文件。

8. 现在启动 varnish 服务,暂时使其能够在服务器重新启动时在系统启动期间自动启动,并检查其状态以确保其启动并运行,如下所示。

systemctl start varnish
systemctl enable varnish
systemctl status varnish

步骤 3:配置 Apache 以使用 Varnish 缓存

9. 现在是时候配置 Varnish Cache 在 Apache 服务前面运行了。默认情况下,Apache 服务器配置为侦听端口 80,这是在主配置文件 /etc/httpd/conf/httpd.conf 中定义的。

打开它以使用您喜欢的文本编辑器进行编辑。

vi /etc/httpd/conf/httpd.conf

查找监听参数。要在 Apache 服务器前面运行 Varnish,您应该将默认端口 80 更改为 8080(或您选择的任何其他端口):如下面的截图所示。

该端口稍后将作为后端服务器的端口添加到 Varnish 配置文件中。

此外,应将通过 Varnish 提供服务的每个网站/应用程序的虚拟主机配置配置为侦听上述端口。这是我们测试站点的配置(/etc/httpd/conf.d/howtoing.lan.conf)。

<VirtualHost *:8080>
    DocumentRoot "/var/www/html/tecmint.lan/"
    ServerName www.tecmint.lan
    # Other directives here
</VirtualHost>

重要:为了防止使用默认的 Apache HTTP 服务器测试页面,请注释掉文件 /etc/httpd/conf.d 中的所有行/welcome.conf 或直接删除该文件。

rm /etc/httpd/conf.d/welcome.conf 

10. 接下来,测试 httpd 配置语法是否有任何错误。如果没问题,请重新启动 httpd 服务以应用新的更改。

httpd -t
systemctl restart httpd

为 Systemd 配置 Varnish

11.要在HTTPD前面部署Varnish,您只需将其配置为在默认HTTP端口80中监听客户端请求,如下所示以下。

请注意,在 Varnish Cache 6.0 及更高版本中,您必须在 systemd 的 Varnish 服务文件中设置 Varnish 服务器侦听的端口。首先,打开它进行编辑。

systemctl edit --full  varnish

查找 ExecStart 行,然后将 -a 开关的值(指定 varnish 侦听地址和端口)从 :6081:80 ,如以下屏幕截图所示。

重要的是,如果您不指定地址,varnishd 将监听服务器上所有可用的 IPv4IPv6 接口。

ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m

保存文件中的更改并退出。

使用VCL配置Varnish后端服务器

12. 现在,您需要配置源服务器,在 Varnish 术语中称为后端。这是理解 HTTP 的服务器,Varnish 与之对话,以获取内容 - 在本例中为 httpd。它在主配置文件/etc/varnish/default.vcl中进行配置。

vi /etc/varnish/default.vcl 

有一个名为 default 的默认后端配置部分。您可以将“default”更改为server1(或您选择的任何名称以满足您的环境标准)。默认情况下,host 参数指向 localhost,假设后端服务器在 localhost 上运行。

然后将端口设置为 8080 (您在 Apache 虚拟主机配置文件中定义的端口),如屏幕截图所示。

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

如果您的后端服务器运行在不同的主机上,例如,地址为10.42.1.10的另一台服务器,则host参数应指向这个IP地址。

backend server1 {
    .host = "10.42.1.10";
    .port = "8080";
}

保存文件并关闭它。

13.完成有关Varnish的所有必要更改后,重新加载systemd管理器配置以反映Varnish服务文件中的新更改并重新启动Varnish 服务来应用整体更改。

systemctl daemon-reload
systemctl restart varnish

14. 此时,Varnish 和 Apache 现在应该分别监听端口 808080。您可以使用套接字统计命令确认这一点。

ss -tpln

第 4 步:测试 Varnish 缓存和 Apache 设置

14.要测试Varnish Cache-HTTPD设置,请打开网络浏览器,然后使用服务器IPFQDN进行导航如下图所示。

http://10.42.0.144
OR
http://www.tecmin.lan

然后检查网页是否通过 Varnish Cache 提供服务,如下所示。通过右键单击显示的网页来检查HTTP标头,选择检查打开开发者工具,然后单击网络选项卡,然后重新加载页面。然后选择一个请求来查看 HTTP 标头以确认这一点,如以下屏幕截图所示。

或者,您可以运行以下curl命令来验证它。

curl -I http:///10.42.0.144
OR
#curl -I http:///www.tecmint.lan

有用的 Varnish 缓存实用程序

15. 让我们通过查看 Varnish Cache 发行版附带的一些有用程序来结束本指南。它们包括用于 varnish 缓存管理、显示详细日志记录以及查看 varnish 性能统计信息的实用程序,如下所述。

清漆

第一个是 varnishadm,用于管理正在运行的 Varnish 实例。它建立到 varnishd 的命令行界面连接。它可以通过启动和停止 varnishd、更改配置参数、重新加载 VCL、列出后端等来影响正在运行的 Varnish 实例。

varnishadm
> backend.list

有关详细信息,请阅读 man varnishadm

清漆日志

下一个程序是 varnishlog,它用于访问特定于请求的数据(即有关特定客户端和请求的信息)。它提供了大量的信息,因此通常需要对其进行过滤。

varnishlog

有关更多信息,请阅读 man varnishlog

清漆统计

我们还有 varnishstatvarnish 统计信息),用于访问总体统计信息,例如总请求数、对象数等。

varnishstat

有关更多信息,请阅读 man varnishstat

清漆顶

然后我们有 varnishtop,它是一个实用程序,可以读取 Varnish 日志并显示最常出现的日志条目的持续更新列表。

varnishtop 

有关详细信息,请阅读 man varnishtop

清漆主义

另一个有用的实用程序是 varnishhistvarnish 历史)实用程序读取 Varnish 日志并呈现一个不断更新的直方图,显示最后 N 个请求的分布情况加工。

varnishhist

有关更多信息,请阅读man varnishhist

你有它!您已成功部署 Varnish Cache,以加速在 CentOS/RHEL 8 上使用 Apache HTTP 服务器提供的 Web 应用程序内容。

如果您对此主题有任何疑问或有任何想法要分享,请使用下面的反馈表。查看 Varnish Cache 6.0 文档以获取更多信息。

如果您想在站点上启用 HTTPS,请查看我们的下一篇文章,其中将介绍如何在 CentOS/RHEL 8 上使用 Hitch 为 Varnish 缓存启用 SSL/TLS。