想一想当你看到本页面时发生了什么。要么点击了第三方链接跳转到本页面,要么访问idccoupon.com主页上的链接,然后才能看到这篇文章。简而言之,你自己(实际上是浏览器)向托管此站点的Web服务器发送了一个HTTP请求,该服务器发回了一个HTTP响应。
这听起来很简单,但这个过程涉及东西的远不止这些。必须在服务器端进行大量处理才能呈现格式良好的页面,这样你就可以看到其中包含所有资源——静态和动态。但是,如果Web服务器同时响应许多这样的请求(或许只需要几百个),它很快就会让整个系统陷入瘫痪。
这种情况就是高性能HTTP加速器和反向代理Varnish可以解决的地方。在本文中,小编将简单介绍安装和使用Varnish作为Apache或Nginx的前端,以便更快地缓存HTTP响应,而不会给Web服务器增加额外的负载。
需要注意的是,由于Varnish通常将其缓存存储在内存中而不是磁盘上,因此需要小心并限制分配给缓存的RAM空间。
Varnish工作原理
Varnish是一个高性能的反向代理缓存服务器,它能够加速Web应用程序并提高用户的访问速度。其原理主要是通过在内存中缓存动态Web页面和静态资源,从而减少原始服务器的负载和响应时间。
具体来说,当用户请求一个页面时,Varnish首先检查其内存中是否已经缓存了该页面。如果已经缓存,Varnish就直接将页面返回给用户,而不需要从原始服务器获取数据。如果页面没有被缓存,Varnish会将请求转发给原始服务器,同时将响应缓存到自己的内存中。当下一次有用户请求相同的页面时,Varnish将直接从缓存中返回响应,而不需要再次向原始服务器发送请求。
Varnish的高性能主要得益于其使用了一些优化技术,包括:
- 基于内存的缓存:使用内存来缓存Web页面和静态资源,这使得缓存读写速度非常快。
- 可扩展性:可以通过在多台服务器之间分配负载来扩展其缓存能力。
- 精简的代码:代码非常精简,这使得它的响应时间非常快。
- 可配置性:具有丰富的配置选项,可以根据不同的应用程序和负载特点进行调整。
总之,Varnish通过在内存中缓存Web页面和静态资源来提高Web应用程序的性能和用户的访问速度,从而减少原始服务器的负载和响应时间。
在Linux服务器上安装Varnish Cache
注意:在继续下一步之前,假设你已经安装了LAMP或LEMP服务器。如果没有,请在继续之前安装其中一个Web堆栈环境。
一般情况下,官方文档建议从开发人员自己的存储库安装Varnish ,因为他们总是提供最新版本。当然,你也可以选择从你的发行版的官方存储库安装软件包,只不过它可能有点过时了。
另外,请注意该项目的存储库仅提供对64位系统的支持,而对于32位系统,必须求助于你发行版的官方维护存储库。接下来,小编将从每个发行版官方支持的存储库安装Varnish 。使用该方法的主要原因是提供安装方法的统一性并确保所有体系结构的自动依赖性解析。
在基于Debian的Linux中安装Varnish
在基于Debian的发行版上,可以使用apt命令安装Varnish,如下所示:
# apt update # apt install varnish
在基于RHEL的Linux中安装Varnish
在基于RHEL的发行版(例如CentOS、Rocky和 AlmaLinux)上,需要在使用yum命令安装Varnish之前启用EPEL存储库,如下所示:
# 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运行时配置。在这里,需要通过运行以下命令将默认的清漆端口从6081更改为端口80,将缓存大小更改为1GB,这将在编辑器中打开单元文件。
注意:可以根据硬件资源更改内存量,或者选择将缓存文件保存到磁盘。
$ sudo systemctl edit --full varnish 或者 # systemctl edit --full varnish
对/etc/systemd/system/varnish.service文件进行更改后,需要通过运行以下命令重新加载Systemd守护进程:
# systemctl daemon-reload
更改Apache或Nginx端口
更改Varnish端口后,现在需要将Apache或Nginx Web服务器端口从默认的80更改为最常见的网络端口,即8080。
---------- 在基于Debian的系统上 ---------- # nano /etc/apache2/ports.conf [Apache] # /etc/nginx/sites-enabled/default [Nginx] ---------- 在基于RHEL的系统上 ------------ # vi /etc/httpd/conf/httpd.conf [Apache] # vi /etc/ nginx/nginx.conf [Nginx]
完成更改后,不要忘记重新启动Varnish和Web服务器。
# systemctl restart varnish ---------- 在基于Debian系统上 ---------- # systemctl restart apache2 # systemctl restart nginx ---------- 在基本RHEL系统上 ---------- # systemctl restart httpd # systemctl restart nginx
在Linux系统中测试Varnish Cache
第一个测试包括通过curl命令发出HTTP请求并验证它是否由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服务器、Apache或Nginx之前设置Varnish缓存。请注意,本文没有深入研究default.vcl配置文件,其实该配置文件允许用户进一步自定义缓存策略,感兴趣的小伙伴可以搜索相关资料进行详细了解。