在浏览到当前页面时,请稍微考虑一下发生了什么。您可能是通过电子通讯收到的链接,或者在Tecmint.com主页上的链接上点击,然后被带到了这篇文章。
简单来说,您(或者实际上是您的浏览器)向托管此网站的Web服务器发送了HTTP请求,服务器返回了HTTP响应。
尽管听起来很简单,但这个过程涉及的远不止这些。为了呈现您可以看到的漂亮格式的页面以及其中的所有资源(静态和动态),需要进行大量的服务器端处理。
即使不深入挖掘,您也可以想象,如果Web服务器必须同时响应许多类似的请求(刚开始只有几百个),很快就会使自身或整个系统陷入瘫痪。
这就是Varnish发挥作用的地方,它是一个高性能的HTTP加速器和反向代理。在本文中,我将解释如何安装和使用Varnish作为Apache或Nginx的前端,以更快地缓存HTTP响应,而不会给Web服务器增加更多负载。
然而,由于Varnish通常将其缓存存储在内存中而不是磁盘上,因此我们需要小心并限制为缓存分配的RAM空间。我们将在一分钟内讨论如何做到这一点。
目录
如何Varnish工作

在Linux服务器上安装Varnish缓存
本文假设您已经安装了一个LAMP或LEMP服务器。如果没有,请先安装其中一个堆栈,然后再继续。
- 如何在基于 RHEL 的发行版上安装 LAMP 服务器
- 如何在 Ubuntu 上安装 LAMP 服务器
- 如何在 Debian 上安装 LAMP 服务器
- 如何在基于 RHEL 的发行版上安装 LEMP 服务器
- 如何在 Ubuntu 上安装 LEMP 服务器
- 如何在 Debian 上安装 LEMP 服务器
官方文档建议从开发者自己的存储库安装 Varnish,因为他们始终提供最新版本。您也可以选择从您发行版的官方存储库安装软件包,尽管它可能有点过时。
此外,请注意项目的存储库仅提供对64位系统的支持,而对于32位机器,您必须求助于您的发行版的官方维护的存储库。
在本文中,我们将从每个发行版官方支持的存储库中安装Varnish。做出这一决定的主要原因是提供统一的安装方法,并确保为所有架构自动解决依赖关系。
在基于Debian的Linux中安装Varnish
在基于Debian的发行版上,您可以使用apt命令安装Varnish,如下所示。
# apt update # apt install varnish

在基于RHEL的Linux中安装Varnish
在基于RHEL的发行版,如CentOS、Rocky和AlmaLinux上,您需要在安装Varnish之前启用EPEL仓库,并使用yum命令进行安装,如下所示。
# yum install epel-release # yum update # yum install varnish

如果安装成功完成,您将根据您的发行版拥有以下varnish版本之一:
# varnishd -V varnishd (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64)
最后,如果安装过程没有为您自动启动Varnish,您需要手动启动它,并启用它在启动时自动启动。
# systemctl start varnish # systemctl enable varnish # systemctl status varnish

默认情况下,varnish服务使用端口6081,您可以通过运行以下netstat命令来确认。
# netstat -tunlp | grep 6081

在Linux中配置Varnish Cache
正如我们之前所说,Varnish位于外部客户端和Web服务器之间。因此,为了让缓存对最终用户透明,我们需要做以下操作:
- 将Varnish监听的默认端口6081更改为80。
- 将Web服务器监听的默认端口更改为8080,而不是默认的80。
- 将传入的流量从Varnish重定向到Web服务器。幸运的是,在我们完成了1)和2)步骤之后,Varnish会自动执行此操作。
更改Varnish端口
由varnishd进程由systemd控制,并且在/usr/lib/systemd/system/varnish.service中有一个单元文件,该文件保存了默认的Varnish运行时配置。
在这里,我们需要将默认的varnish端口从6081更改为端口80,并将缓存大小更改为1GB,如运行以下命令所示,该命令将打开单元文件以供编辑,如下所示。
注意:您可以根据您的硬件资源更改内存量,或者选择将缓存文件保存到磁盘。
$ sudo systemctl edit --full varnish OR # systemctl edit --full varnish

在对/etc/systemd/system/varnish.service文件进行更改后,您需要通过运行以下命令来重新加载Systemd守护进程:
# systemctl daemon-reload
更改Apache或Nginx端口
更改Varnish端口后,您需要将您的Apache或NginxWeb服务器端口从默认的80更改为最常用的网络端口,即8080。
---------- On Debian-based Systems ---------- # nano /etc/apache2/ports.conf [On Apache] # /etc/nginx/sites-enabled/default [On Nginx] ---------- On RHEL-based Systems ---------- # vi /etc/httpd/conf/httpd.conf [On Apache] # vi /etc/nginx/nginx.conf [On Nginx]

更改完成后,请不要忘记重新启动Varnish和Web服务器。
# systemctl restart varnish ---------- On Debian-based Systems ---------- # systemctl restart apache2 # systemctl restart nginx ---------- On RHEL-based Systems ---------- # systemctl restart httpd # systemctl restart nginx
在Linux中测试Varnish缓存
第一个测试是通过HTTP请求使用curl命令,并验证它是否由Varnish处理:
# curl -I http://localhost

Varnish还包含两个方便的工具:
- 实时查看Varnish日志,直观地称为varnishlog。
- 显示Varnish缓存统计信息,称为varnishstat。
作为第二个测试,在下面的屏幕录像中,我们将显示在CentOS服务器(dev1,屏幕上半部分)和在Debian服务器(dev2,屏幕下半部分)上发送HTTP请求和接收响应时的日志和统计信息。
测试Web服务器性能基准
我们的第三项也是最后一项测试将包括使用ab基准测试工具对Web服务器和Varnish进行基准测试,并比较两者的响应时间和CPU负载。
在这个特定的例子中,我们将使用CentOS服务器,但你可以使用任何发行版并获得类似的结果。观察平均负载在顶部和ab输出中的每秒请求数行。
使用ab,我们将同时发送50(-c 50)个并发请求,并重复测试1000000次(由-n 1000000指示)。Varnish将返回更高的每秒请求数和低得多的平均负载。
重要:请记住,Varnish监听端口80(默认HTTP端口),而Apache监听端口8080。你还可以记录完成每次测试所需的时间。
# ab -c 50 -n 100000 http://localhost/index.html
结论
在本文中,我们讨论了如何在Web服务器Varnish、Apache或Nginx前面设置缓存。请注意,我们没有深入探讨default.vcl配置文件,它允许我们进一步自定义缓存策略。
你现在可能想要参考官方文档以获取进一步的配置示例,或者使用下面的表单留下评论。
Source:
https://www.tecmint.com/install-varnish-cache-server/