如何在 CentOS 7 上使用 Varnish Cache 加速 Apache
Varnish Cache(通常称为Varnish)是一款开源的、流行的反向代理 HTTP 加速器,旨在加速 Web 服务器。它专为过度使用的 API 端点以及提供大量内容和高流量的动态网站而设计。
它基本上有助于减少 CPU 负载;支持 Web 服务器上的负载平衡,并使 Web 浏览器能够通过将缓存存储在 RAM 中来快速加载网站。许多大公司都在使用它,其中包括Facebook、Twitter和Wikipedia,仅举几例。
要求
在本文中,我将解释如何安装和使用Varnish Cache 6.5作为CentOS 7(也适用于RHEL 7)中Apache Web 服务器的前端。
步骤1:在CentOS 7上安装Apache Web服务器
1.首先使用YUM 包管理器从默认 CentOS 软件存储库安装 Apache HTTP 服务器,如下所示。
# yum install httpd
2.安装 Apache 后,暂时启动它并使其在系统启动时自动启动。
# systemctl start httpd # systemctl enable httpd # systemctl status httpd
3.接下来使用以下命令更新系统防火墙规则以允许端口80上的入站数据包。
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --reload
第 2 步:在 CentOS 7 上安装 Varnish Cache
4.现在有最新版本的Varnish Cache 6(即撰写本文时为6.5 )的预编译 RPM 包,因此您需要添加官方Varnish Cache存储库。
在此之前,您需要启用 EPEL 存储库来安装几个依赖包,如下所示。
# yum install -y epel-release
5.接下来,安装pygpgme(一个用于处理 GPG 签名的软件包)和yum-utils(一组有用的实用程序,可以通过各种方式扩展 yum 的本机功能)。
# yum install pygpgme yum-utils
6.现在创建一个名为/etc/yum.repos.d/varnishcache_varnish65.repo的文件,其中包含下面的存储库配置。
# vi /etc/yum.repos.d/varnishcache_varnish65.repo
重要提示:请确保用你的 Linux 发行版和版本替换以下配置中的el
和:7
[varnishcache_varnish65] name=varnishcache_varnish65 baseurl=https://packagecloud.io/varnishcache/varnish65/el/7/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/varnishcache/varnish65/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [varnishcache_varnish65-source] name=varnishcache_varnish65-source baseurl=https://packagecloud.io/varnishcache/varnish65/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/varnishcache/varnish65/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300
7.现在运行以下命令来更新您本地的 yum 缓存并安装 varnish 缓存包(不要忘记在安装包时输入y
或接受 GPG 密钥):yes
# yum -q makecache -y --disablerepo='*' --enablerepo='varnishcache_varnish65' # yum install varnish
8.安装Varnish Cache后,主可执行文件将安装为/usr/sbin/varnishd,并且 varnish 配置文件位于/etc/varnish/中:
- /etc/varnish/default.vcl – 这是主要的 varnish 配置文件,它是使用 vanish 配置语言(VCL)编写的。
9.现在启动 varnish 服务,使其在系统启动时自动启动,并验证其状态以确保它已启动并正在运行,如下所示。
# systemctl start varnish # systemctl enable varnish # systemctl status varnish
10.您可以通过查看系统上安装的 Varnish 可执行文件和版本的位置来确认 Varnish 安装是否成功。
$ which varnishd $ varnishd -V
示例输出
varnishd (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64) Copyright (c) 2006 Verdens Gang AS Copyright (c) 2006-2020 Varnish Software
步骤3:配置Apache以使用Varnish缓存
11.现在配置 Apache 与 Varnish Cache 协同工作。默认情况下,Apache 监听端口80,您需要将默认 HTTPD 端口更改为8080 – 这将确保 HTTPD 在 Varnish 缓存后面运行。
您可以使用sed 命令将端口80更改为8080,如图所示。
# sed -i "s/Listen 80/Listen 8080/" /etc/httpd/conf/httpd.conf
注意:此外,您还需要更改要通过 Varnish 提供服务的每个网站的虚拟主机配置上的端口。以下是我们的测试站点的配置(/etc/httpd/conf.d/example.lan.conf)。
<VirtualHost *:8080> DocumentRoot "/var/www/html/example.lan/" ServerName www.example.lan # Other directives here </VirtualHost>
12.接下来打开varnish systemd配置文件,找到指定Varnish监听的端口的参数ExecStart ,并将其值从6081更改为80,如截图所示。
# systemctl edit --full varnish
完成后的配置应该如下所示。
ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
13.接下来,在/etc/varnish/default.vcl配置文件中将 Apache 设置为 Varnish 代理的后端服务器。
# vi /etc/varnish/default.vcl
找到后端部分,并定义主机 IP 和端口。以下是默认的后端配置,将其设置为指向您的实际内容服务器。
backend default { .host = "127.0.0.1"; .port = "8080"; }
如果您的后端服务器在地址为10.42.1.10的其他服务器上运行,则主机参数应指向该 IP 地址。
backend server1 { .host = "10.42.1.10"; .port = "8080"; }
14.完成所有必要的配置后,重新启动 HTTPD 和 Varnish 缓存以使上述更改生效。
# systemctl daemon-reload # systemctl restart httpd # systemctl restart varnish
步骤4:在Apache上测试Varnish缓存
15.最后,使用下面的cURL 命令测试 Varnish 是否已启用并与HTTPD服务一起使用,该命令可用于查看 HTTP 标头。
# curl -I http://localhost
示例输出
HTTP/1.1 200 OK Date: Wed, 06 Jan 2021 08:36:07 GMT Server: Apache/2.4.6 (CentOS) Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT ETag: "1321-5058a1e728280" Accept-Ranges: bytes Content-Length: 4897 Content-Type: text/html; charset=UTF-8 X-Varnish: 131085 Age: 0 Via: 1.1 varnish (Varnish/6.5) Connection: keep-alive
有关更多信息,请查看 Varnish Cache Github 存储库:https://github.com/varnishcache/varnish-cache
在本教程中,我们解释了如何在 CentOS 7 上为 Apache HTTP 服务器设置Varnish Cache 6.5代理。如果您有任何疑问或其他想法需要分享,请使用下面的反馈表回复我们。