如何在 CentOS/RHEL 8 上为 Nginx 安装 Varnish Cache 6
Varnish Cache(通常称为Varnish)是一款开源、功能强大且快速的反向代理HTTP加速器,具有现代架构和灵活的配置语言。反向代理只是意味着它是一种可以部署在 Web 服务器(即源服务器或后端)前面的软件,例如Nginx,用于接收客户端的 HTTP 请求并将其转发到源服务器进行处理。它将源服务器的响应传递给客户端。
Varnish充当Nginx和客户端之间的中间人,但具有一些性能优势。它的主要目的是通过充当缓存引擎来加快应用程序的加载速度。它接收来自客户端的请求,并将它们转发到后端一次以缓存请求的内容(将文件和文件片段存储在内存中)。然后,所有对完全相同内容的未来请求都将从缓存中提供。
这使得您的 Web 应用程序加载速度更快,并间接提高您的 Web 服务器的整体性能,因为Varnish将从内存中提供内容,而不是 Nginx 处理来自存储磁盘的文件。
除了缓存之外,Varnish还有其他几个用例,包括 HTTP 请求路由器、负载均衡器、Web 应用程序防火墙等。
Varnish使用高度可扩展的内置Varnish 配置语言( VCL ) 进行配置,该语言使您能够编写有关如何处理传入请求的策略。您可以使用它来构建自定义解决方案、规则和模块。
在本文中,我们将介绍在全新CentOS 8或RHEL 8服务器上安装Nginx Web 服务器和Varnish Cache 6 的步骤。RHEL 8用户应确保启用 redhat 订阅。
要设置完整的LEMP堆栈而不是单独安装Nginx Web 服务器,请查看以下指南。
步骤 1:在 CentOS/RHEL 8 上安装 Nginx Web 服务器
1. CentOS /RHEL 8附带最新版本的Nginx Web 服务器软件,因此我们将使用以下dnf 命令从默认存储库安装它。
# dnf update # dnf install nginx
2.安装Nginx后,您需要使用以下systemctl 命令启动、启用并验证状态。
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
3.如果您有点好奇,您还可以使用以下ss 命令检查默认在端口 80 上运行的 Nginx TCP 套接字。
# ss -tpln
4.如果您在系统上运行防火墙,请确保更新防火墙规则以允许对 Web 服务器的请求。
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --reload
步骤2:在 CentOS/RHEL 8 上安装 Varnish Cache 6
5. CentOS /RHEL 8默认提供Varnish Cache DNF模块,其中包含版本6.0 LTS(长期支持)。
要安装模块,请运行以下命令。
# dnf module install varnish
6.模块安装完成后,您可以确认系统上安装的Varnish版本。
# varnishd -V
7、安装Varnish Cache后,主要可执行命令安装在/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 步:配置 Nginx 与 Varnish Cache 配合使用
9.在本节中,我们将展示如何配置Varnish Cache在Nginx之前运行。默认情况下,Nginx 监听端口80,通常每个服务器块(或虚拟主机)都配置为监听此端口。
例如,查看主配置文件(/etc/nginx/nginx.conf )中配置的默认 nginx 服务器块。
# vi /etc/nginx/nginx.conf
查找服务器块部分,如下面的屏幕截图所示。
10.要在Nginx前面运行Varnish,您应该将默认的 Nginx 端口从80更改为8080(或您选择的任何其他端口)。
这应该在所有未来的服务器块配置文件(通常在/etc/nginx/conf.d/下创建)中完成,这些文件适用于您想要通过Varnish提供服务的站点或 Web 应用程序。
例如,我们的测试站点的服务器块example.lan
是/etc/nginx/conf.d/example.lan.conf并具有以下配置。
server { listen 8080; server_name www.example.lan; root /var/www/html/example.lan/; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
重要提示:请记住通过在/etc/nginx/nginx.conf文件中注释掉其配置部分来禁用默认服务器块,如以下屏幕截图所示。这使您能够开始在服务器上运行其他网站/应用程序,否则,Nginx 将始终将请求定向到默认服务器块。
11.配置完成后,检查配置文件是否有任何错误,并重新启动Nginx服务以应用最近的更改。
# nginx -t # systemctl restart nginx
12.接下来,为了接收来自客户端的HTTP请求,我们需要将Varnish配置为在端口80上运行。与早期版本的Varnish Cache不同,在6.0及更高版本中,此更改是在Varnish环境文件(现已弃用)中进行的。
我们需要在 Varnish 服务文件中进行必要的更改。运行以下命令打开相应的服务文件进行编辑。
# systemctl edit --full varnish
找到以下行并更改指定监听地址和端口的开关值-a
。将端口设置为80,如下面的屏幕截图所示。
请注意,如果您未指定地址,varnishd将监听服务器上所有可用的IPv4和IPv6接口。
ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
保存文件中的更改并退出。
13.接下来,您需要定义Varnish将访问以获取内容的后端服务器。这在 Varnish 主配置文件中完成。
# vi /etc/varnish/default.vcl
查找默认后端配置部分,将字符串“ default ”更改为server1(或您选择的任何名称以代表您的原始服务器)。然后将端口设置为8080(或您在服务器块中定义的 Nginx 监听端口)。
backend server1 { .host = "127.0.0.1"; .port = "8080"; }
在本指南中,我们在同一台服务器上运行Varnish和Nginx。如果您的 Nginx Web 服务器在不同的主机上运行。例如,另一台地址为10.42.0.247 的.host
服务器,则按所示设置参数。
backend server1 { .host = "10.42.0.247"; .port = "8080"; }
保存文件并关闭。
14.接下来,您需要重新加载systemd管理器配置,因为 Varnish 服务文件最近发生了更改,然后重新启动 Varnish 服务以应用更改,如下所示。
# systemctl daemon-reload # systemctl restart varnish
15.现在确认Nginx和Varnish正在监听配置的TCP套接字。
# ss -tpln
第 4 步:测试 Nginx Varnish 缓存设置
16.接下来,验证网页是否通过Varnish Cache提供,如下所示。打开 Web 浏览器并使用服务器 IP 或 FDQN 进行导航,如以下屏幕截图所示。
http://www.tecmin.lan OR http://10.42.0.144
17.或者,使用curl 命令,如下所示。使用服务器的 IP 地址或网站的 FQDN,或者如果您在本地测试,则使用 127.0.0.1 或 localhost。
# curl -I http:///www.example.lan
有用的 Varnish 缓存管理实用程序
18.在最后一节中,我们将简要介绍Varnish Cache附带的一些有用的实用程序,您可以使用它们来控制varnishd、访问内存日志和总体统计信息等。
清漆
varnishadm 是一个用于控制正在运行的 Varnish 实例的实用程序。它与 varnishd 建立 CLI 连接。例如,您可以使用它列出已配置的后端,如以下屏幕截图所示(阅读man varnishadm了解更多信息)。
# varnishadm varnish> backend.list
varnishlog
varnishlog实用程序提供对请求特定数据的访问。它提供有关特定客户端和请求的信息(阅读man varnishlog了解更多信息)。
# varnishlog
varnishstat
varnishstat也称为varnish statistics,通过提供对内存统计信息(例如缓存命中和未命中、有关存储的信息、创建的线程、删除的对象)的访问,让您一目了然地了解 Varnish 的当前性能(阅读man varnishstat了解更多信息)。
# varnishstat
清漆顶部
varnishtop实用程序读取共享内存日志并提供最常出现的日志条目的持续更新列表(阅读man varnishtop了解更多信息)。
# varnishtop
清漆
varnishhist (varnish history)实用程序会解析 varnish 日志并输出一个不断更新的直方图,以显示最后 n 个请求的处理的分布情况( 阅读man varnishhist了解更多信息)。
# varnishhist
就这样!在本指南中,我们展示了如何安装Varnish Cache并在Nginx HTTP服务器前运行它,以加速CentOS/RHEL 8中的 Web 内容交付。
您可以使用下面的反馈表分享有关本指南的任何想法或问题。有关更多信息,请阅读Varnish Cache 文档。
Varnish Cache的主要缺点是缺乏对HTTPS的原生支持。要在您的网站/应用程序上启用HTTPS ,您需要配置 SSL/TLS 终止代理以与Varnish Cache配合使用来保护您的网站。在下一篇文章中,我们将展示如何在CentOS/RHEL 8上使用 Hitch 为 Varnish Cache 启用 HTTPS。