使用Varnish为网站加速

news/2024/5/22 4:46:09/文章来源:https://blog.csdn.net/weixin_30826095/article/details/101106757

(1).Varnish概述

  Varnish是一款高性能的开源HTTP加速器,可以有效降低web服务器的负载,提升访问速度。根据官方的说法,Varnish是一个cache型的HTTP反向代理。

  Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算 机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是Varnish cache设计架构。

  当把Varnish部署上之后,web请求的处理过程会有一些变化。客户端的请求将首先被Varnish接受。Varnish将分析接收的请求,并将其转发到后端的web服务器上。后端的web服务器对请求进行常规的处理,并将依次将处理结果返回给Varnish。

  但Varnish的功能并非仅限于此。Varnish的核心功能是将后端web服务器返回的结果缓存起来,如果发现后续有相同的请求,Varnish将不会将这个请求转发到web服务器,而是返回缓存中的结果。这将有效的降低web服务器的负载,提升响应速度,并且每秒可以响应更多的请求。Varnish速度很快的另一个主要原因是其缓存全部都是放在内存里的,这比放在磁盘上要快的多。诸如此类的优化措施使得Varnish的相应速度超乎想象。但考虑到实际的系统中内存一般是有限的,所以需要手工配置一下缓存的空间限额,同时避免缓存重复的内容。

  处理缓存的顺序:接受到请求 –- 分析请求(分析你的URL,分析你的首部) -- hash计算 -- 查找缓存 -- 新鲜度检测 --- 访问源 --- 缓存 – 建立响应报文 – 响应并记录日志。

  监听端口6081,管理进程management,子进程child/cache,官网https://www.varnish-cache.org/。

(2).Varnish特点与Squid的对比

Varnish特点:

  基于内存缓存,重启后数据将消失。
  利用虚拟内存方式,I/O性能好。
  支持设置0~60秒内的精确缓存时间。
  VCL(全称varnish config language,这是Varnish自己领域的特定语言)配置管理比较灵活。
  32位机器上缓存文件大小为最大2G。
  具有强大的管理功能,例如top,stat,admin,list等。
  状态机设计巧妙,结构清晰。
  利用二叉堆管理缓存文件,达到积极删除目的。

Varnish与Squid的对比:

 相同点:

  都是一个反向代理服务器;
  都是开源软件;

 Varnish相较于Squid的优点:

  Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启;
  Varnish访问速度更快,Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而Squid是从硬盘读取,因此Varnish在访问速度方面会更快;
  Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快,所以在高并发连接情况下可以支持更多TCP连接;
  Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的;
  Squid属于是单进程使用单核CPU,但Varnish是通过fork形式打开多进程来做处理,所以是合理的使用所有核来处理相应的请求;

 Varnish相较于Squid的缺点:

  Varnish在高并发状态下CPU、I/O和内存等资源开销都高于Squid;
  Varnish进程一旦Hang(挂起)、Crash(崩溃)或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力;
  在Varnish使用中如果单个url的请求通过HA/F5(负载均衡)每次请求不同的varnish服务器中,被请求varnish服务器都会被穿透到后端,而且同样的请求会在多台服务器上缓存,也会造成Varnish的缓存的资源浪费,也会造成性能下降。

(3).安装Varnish

1)安装环境

youxi1  192.168.1.6  源码包安装

youxi2  192.168.1.7  yum安装实例、Web后端

youxi3  192.168.1.8  Web后端

2)安装

  youxi1上源码安装varnish6.2.0(建议使用该安装方式)

//安装依赖包
[root@youxi1 ~]# yum -y install make autoconf automake libedit-devel libtool ncurses-devel pcre-devel pkgconfig python3-docutils python3-sphinx graphviz
[root@youxi1 ~]# tar xf varnish-6.2.0.tgz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/varnish-6.2.0/
[root@youxi1 varnish-6.2.0]# ./configure --prefix=/usr/local/varnish
[root@youxi1 varnish-6.2.0]# make && make install
[root@youxi1 varnish-6.2.0]# echo $?
0
[root@youxi1 varnish-6.2.0]# cd /usr/local/varnish/
[root@youxi1 varnish]# mkdir etc
[root@youxi1 varnish]# cp share/doc/varnish/example.vcl etc/default.vcl  //生成vcl配置文件

  youxi2上yum安装varnish(简单了解)

[root@youxi2 ~]# vim /etc/yum.repos.d/varnishcache_varnish62.repo
[varnishcache_varnish62]
name=varnishcache_varnish62
baseurl=https://packagecloud.io/varnishcache/varnish62/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/varnishcache/varnish62/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300[varnishcache_varnish62-source]
name=varnishcache_varnish62-source
baseurl=https://packagecloud.io/varnishcache/varnish62/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/varnishcache/varnish62/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
[root@youxi2 ~]# yum clean all && yum list  //清除yum缓存,并重新生成
[root@youxi2 ~]# yum -y install varnish

3)配置youxi1上的Varnish缓存youxi2上的网站

  youxi1修改vcl配置文件

[root@youxi1 ~]# vim /usr/local/varnish/etc/default.vcl
backend default {  //第16~19行
.host = "192.168.1.7";  //修改Web后端网站的IP地址
.port = "80";  //修改Web后端网站的端口号
}sub vcl_deliver {  //第35行开始,缓存命中情况if (obj.hits > 0) {set resp.http.X-Cache = "HIT cache";}else {set resp.http.X-Cache = "Miss cache";}
}

  配置环境变量

[root@youxi1 ~]# vim /etc/profile.d/varnish.sh
export PATH=/usr/local/varnish/bin:/usr/local/varnish/sbin:$PATH
[root@youxi1 ~]# . /etc/profile.d/varnish.sh  //加载环境变量

  启动Varnish

[root@youxi1 ~]# varnishd -a 192.168.1.6:80,HTTP -f /usr/local/varnish/etc/default.vcl
Debug: Version: varnish-6.2.0 revision b14a3d38dbe918ad50d3838b11aa596f42179b54
Debug: Platform: Linux,3.10.0-957.el7.x86_64,x86_64,-jnone,-sdefault,-sdefault,-hcritbit
Debug: Child (18374) Started
[root@youxi1 ~]# ps aux | grep varnishd 
root      18364  0.0  0.0  22188  1532 ?        SLs  22:59   0:00 varnishd -a 192.168.1.6:80,HTTP -f /usr/local/varnish/etc/default.vcl
root      18374  1.8  4.4 1029912 89468 ?       SLl  22:59   0:00 varnishd -a 192.168.1.6:80,HTTP -f /usr/local/varnish/etc/default.vcl
root      18593  0.0  0.0 112724   992 pts/0    S+   23:00   0:00 grep --color=auto varnishd
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload
success
success

  youxi2上搭建测试Web后端

[root@youxi2 ~]# yum -y install httpd
[root@youxi2 ~]# echo youxi2 > /var/www/html/index.html
[root@youxi2 ~]# systemctl start httpd
[root@youxi2 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload
success
success

  最后测试

  然后使用curl命令做缓存命中测试,-I选项只取http响应头的信息,不取网页内容

[root@youxi1 ~]# curl -I 192.168.1.7  //这是直接访问youxi2
HTTP/1.1 200 OK
Date: Sun, 04 Aug 2019 15:14:16 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sun, 04 Aug 2019 14:56:47 GMT
ETag: "7-58f4bccfca680"
Accept-Ranges: bytes
Content-Length: 7
Content-Type: text/html; charset=UTF-8[root@youxi1 ~]# curl -I 192.168.1.6  //第一次访问youxi1
HTTP/1.1 200 OK
Date: Sun, 04 Aug 2019 15:14:19 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sun, 04 Aug 2019 14:56:47 GMT
ETag: "7-58f4bccfca680"
Content-Length: 7
Content-Type: text/html; charset=UTF-8
X-Varnish: 12
Age: 0
Via: 1.1 varnish (Varnish/6.2)
X-Cache: Miss cache  //这次是未命中
Accept-Ranges: bytes
Connection: keep-alive[root@youxi1 ~]# curl -I 192.168.1.6  //第二次访问youxi1
HTTP/1.1 200 OK
Date: Sun, 04 Aug 2019 15:16:39 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sun, 04 Aug 2019 14:56:47 GMT
ETag: "7-58f4bccfca680"
Content-Length: 7
Content-Type: text/html; charset=UTF-8
X-Varnish: 15 32773
Age: 2
Via: 1.1 varnish (Varnish/6.2)
X-Cache: HIT cache  //这一次命中缓存了
Accept-Ranges: bytes
Connection: keep-alive

  缓存时间较短,可以尝试配置httpd的长链接功能(配置文件中设置KeepAlive On,然后重启

4)配置youxi1上的Varnish缓存多个网站(youxi1,youxi2)

  youxi1修改vcl配置文件

[root@youxi1 ~]# vim /usr/local/varnish/etc/default.vcl
backend youxi2 {  //原本的default改为主机名.host = "192.168.1.7";.port = "80";
}
backend youxi3 {  //多创建一个.host = "192.168.1.8";.port = "80";
}sub vcl_recv {  //在vcl_recv里添加if (req.http.host ~ "^(www.)?you.cn"){  //正则匹配set req.http.host = "www.you.cn";set req.backend_hint = youxi2;  //指向youxi2后端} elsif (req.http.host ~ "^bbs.you.cn") {  //正则匹配set req.backend_hint = youxi3;  //指向youxi3后端}
}

  重启Varnish,需要使用killall命令,安装psmisc包

[root@youxi1 ~]# yum -y install psmisc
[root@youxi1 ~]# killall varnishd
[root@youxi1 ~]# varnishd -a 192.168.1.6:80,HTTP -f /usr/local/varnish/etc/default.vcl
Debug: Version: varnish-6.2.0 revision b14a3d38dbe918ad50d3838b11aa596f42179b54
Debug: Platform: Linux,3.10.0-957.el7.x86_64,x86_64,-jnone,-sdefault,-sdefault,-hcritbit
Debug: Child (19017) Started

  youxi3上搭建测试Web后端

[root@youxi3 ~]# yum -y install httpd
[root@youxi3 ~]# echo youxi3 > /var/www/html/index.html
[root@youxi3 ~]# systemctl start httpd
[root@youxi3 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload
success
success

  youxi1上编辑/etc/hosts文件

[root@youxi1 ~]# vim /etc/hosts
192.168.1.6 www.you.cn
192.168.1.6 bbs.you.cn

  测试

[root@youxi1 ~]# curl www.you.cn  //第一次访问,可以看到是指向的是youxi2
youxi2
[root@youxi1 ~]# curl -I www.you.cn  //第二次访问,只取http响应头,可以看到击中缓存
HTTP/1.1 200 OK
Date: Sun, 04 Aug 2019 16:09:19 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sun, 04 Aug 2019 14:56:47 GMT
ETag: "7-58f4bccfca680"
Content-Length: 7
Content-Type: text/html; charset=UTF-8
X-Varnish: 5 32772
Age: 12
Via: 1.1 varnish (Varnish/6.2)
X-Cache: HIT cache  //击中缓存
Accept-Ranges: bytes
Connection: keep-alive[root@youxi1 ~]# curl bbs.you.cn  //第一次访问,可以看到指向的是youxi3
youxi3
[root@youxi1 ~]# curl -I bbs.you.cn  //第二次访问,只取http响应头,可以看到击中缓存
HTTP/1.1 200 OK
Date: Sun, 04 Aug 2019 16:09:49 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sun, 04 Aug 2019 16:07:43 GMT
ETag: "7-58f4ccaa0e583"
Content-Length: 7
Content-Type: text/html; charset=UTF-8
X-Varnish: 32774 8
Age: 6
Via: 1.1 varnish (Varnish/6.2)
X-Cache: HIT cache
Accept-Ranges: bytes
Connection: keep-alive

(4).扩展

1)为什么要使用缓存:

  访问过的数据会再次被访问到,热数据多次访问。

  一个数据被访问过会后,离他最近的或者较近的客户端再次访问。

 2)既然要缓存, 需要读取的高速,最好的方法,就是全部放到内存。

  常见的内存数据库,memcached,redis,HANA。

  但是对于页面,全放放到内存,太不现实,内存+高速缓存盘的方式来存储缓存。

  Key-value,key存放于内存,value存放磁盘。

3)一种数据形式:key value

  Key:对访问路径,URL,特定的特征,进行hash计算得出的结果,这种key存放于内存中。

  Value:页体,我们用户真正得到的内容,一般存放在高速硬盘。

4)凡是与缓存缓存相关的,离不开两体:内存,高速硬盘。

5)常见的术语:

  命中:能从缓存取出数据,如果是一台web站点,那么你的缓存服务器将是一台最前端服务器。

  命中率:命中次数/(命中次数+非命中次数)。

  热数据:经常被访问的数据。

  内存缓存空间,磁盘缓存空间。

  清理:定期清理,LRU(不常用的,最老的一类数据将其删除),定期更新(purge)。

  缓存对象:用户信息,cookies,交易信息,页面内存,统统理解为object。

 

  

 

参考:https://www.oschina.net/translate/speed-your-web-site-varnish?print

   http://book.51cto.com/art/201202/314855.htm

   https://blog.51cto.com/tetop/823904

转载于:https://www.cnblogs.com/diantong/p/11300705.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_768416.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型分布式网站架构技术总结

网址:http://www.cnblogs.com/itfly8/p/4967966.html本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记&#xff0…

5分钟把任意网站变成桌面软件--windows版

本文源自于segmentfault的一篇专栏文章:https://segmentfault.com/a/1190000012924855 只不过这篇是MAC版本的,所以我试了下windows版的; 当然想看的,可以看官网的地址 https://github.com/jiahaog/nativefier/blob/master/docs/…

eclipse的maven和动态web网站相互转换

很多eclipse没有转换的功能,其实直接建立一个新的工程最快速,将新建工程对应的文件夹里面内容替换就行,测试通过 两种类型网站转换,maven在pox.xml添加依赖项后,将这两个文件夹里面的东西拷贝粘贴就行

shell脚本实例-跟踪网站日常变动

#!/usr/bin/bash #用途:跟踪网页是否有更新 if [ $# -ne 1 ];then echo -e "$Usage $0 URl " exit fi first_time0 #非第一次运行这个脚本 if [ ! -e "last.html" ] ;then first_time1 fi curl $1 -o recent.html #下载静态页面 if [ $first_ti…

第9个HttpClient 例子,HttpClient+jsoup 扩展获取网站信息

2019独角兽企业重金招聘Python工程师标准>>> 目标&#xff1a;https://www.cnblogs.com/ 1.目标获取博客园的文章与超链接 2.获取指定图像的超链接地址&#xff1a; POM.xml <dependencies><dependency><groupId>org.apache.httpcomponents</g…

.NET Core网站发布到Linux系统的方法(一)

我是一名.NET开发者&#xff0c;精通Windows下的应用和网站开发&#xff0c;但对于Linux则算是一个小白。微软推出了.NET Core&#xff0c;让我们可以在Linux下部署.NET程序。痛苦地折腾了两天&#xff0c;终于解决了所有问题&#xff0c;在Linux下成功运行.NET Core开发的网站…

.NET Core网站发布到Linux系统的方法(二)

三、在Linux系统下安装.NET Core 微软官网有非常详细的说明&#xff0c;按照此说明做就行。 网址&#xff1a;https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current 安装完成以后&#xff0c;其实我们已经可以运行.NET网站了。 运行以下语…

.NET Core网站发布到Linux系统的方法(三)

五、安装和配置Nginx 在这里&#xff0c;Nginx是一个代理的作用。它接受请求&#xff0c;然后交给.NET Core自带的服务器Kestrel去处理。 首先&#xff0c;我们执行以下语句安装Nginx&#xff1a; sudo apt-get install nginx 安装完成以后&#xff0c;如果我们在浏览器输入…

superslider网站特效插件

网站上常用的“焦点图/幻灯片”“Tab标签切换”“图片滚动”“无缝滚动” 如何使用 1.引入jquery.js 引入superslider.js 2.编写HTML 以下是默认的HTMl结构&#xff0c;分别是 ".hd" 里面包含ul&#xff0c; ".bd" 里面包含ul 3.编写css 4.调用superslier …

MVC设计模式在网站中的应用

MVC设计模式在网站中的应用 以淘宝的购物车为例 一、结合六个基本质量属性 可修改性 采用MVC设计模式的时候&#xff0c;可以将视图、模型、控制器分析&#xff0c;将用户动作、数据表示、应用数据分离开来&#xff0c;如果用户需要以不同的视图来展示&#xff0c;只需要修改视…

免费可商用图片网站合集

SSYER-让作品遇见世界&#xff08;https://www.ssyer.com/&#xff09; 旅行日常为主&#xff0c;图片多为用户自己上传&#xff0c;在其他地方很少见到 piqsels&#xff08;https://www.piqsels.com/&#xff09; 基于CCO协议的免版税图库&#xff0c;个人和商业免费使用 pi…

是什么让美国网站拒绝欧洲访问?- GDPR 带来的数据安全思考

当我们置身于网络世界之中&#xff0c;一切的行为都将会被记录下来&#xff0c;互联网企业还会通过『数据画像』让用户具象化、真实化&#xff0c;事实上&#xff0c;在数据面前&#xff0c;我们每个人都只是穿着皇帝的新衣。 那么如何面对这些让人细思极恐的数据世界&#xff…

编程中经常用到的编程网站

2019独角兽企业重金招聘Python工程师标准>>> 1. http://legendtkl.com/categories/golang/ 2. http://blog.jobbole.com/category/go/ 3.http://chuansong.me/account/golangchina?start12 4.https://www.w3cschool.cn/go_internals/ 5.https://www.jankl.com/ 6…

那些好用真香的工具网站

看抽象语法树: https://astexplorer.net/ gif制作&#xff1a;http://www.gif5.net 压缩图片&#xff1a;https://www.yasuotu.com/ 免费在线制作思维导图&#xff0c;流程图ProcessOn-ProcessOn&#xff1a;https://www.processon.com/ 公众号排版网站&#xff1a;http://…

8月30日图雄网站隆重推出三维地图服务系统!!!

北京朝夕科技有限公司是继Google 之后国内第一个在互连网发布3D地图的软件公司&#xff0c;它之前实现了矢量电子地图以及海量影象图的网上发布。而此次mapengine IMS 3D&#xff0d;三维地图服务系统是继此之后的又一个先进的产品&#xff0c;在有成熟且先进的技术背景下&…

LAMP网站申请Let‘’s Encrypt SSL证书升级https

基本概念&#xff1a; HTTP: 是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准&#xff0c;用于从WWW服务器传输超文本到本地浏览器的传输协议&#xff0c;它可以使浏览器更加高效&#xff0c;使网络传输减少。 HTTPS:是以安全为目标的…

[慕课笔记] node+mongodb建站攻略

如何利用nodemongodb来快速搭建一个电影网站&#xff1f;一&#xff1a;后端部分整个网站的后端是由node.js来驱动的&#xff0c;所以在后端需要安装node.js,以及在这个基础之上的框架express&#xff0c;它能够帮助我快速的搭建web应用&#xff0c;然后数据库选用的mongodb&am…

sharepoint 匿名访问网站

最近论坛上有网友提出了一些关于匿名访问的问题&#xff0c;趁此机会做一个总结&#xff0c;呵呵。先说说对于网站的匿名访问。 设置网站的匿名访问一般有三种情况&#xff1a;一是从已开始创建Web应用程序的时候进行匿名访问设置&#xff1b;二是对于已经建立的网站修改为匿名…

发布一条企业网站用的分页SQL语句

发布一条企业网站用的分页SQL语句 之所以一定要说是企业网站用的分页SQL是因为他可能存在性能问题&#xff0c;企业站一般数据量比较小&#xff0c;所以暂时忽略性能问题&#xff0c;而且企业站和新闻论坛站不同&#xff0c;栏目和帖子相对固定&#xff0c;显示的也很固定&…

网站重定向

单位的网站的域名发生了改变。为了不影响用户的正常访问&#xff0c;需要做重定向。虽然从来没有做过&#xff0c;不过没有关系&#xff0c;“谷歌”帮你忙。关键字“重定向"&#xff0c;获得大约 107,000 条查询结果。看了几篇&#xff0c;动手实践了下&#xff0c;达到了…