首先来跟我学习,v~a~r~n~i~s~h~~ ,学会了没有~html
固然还有很重要的一个概念,它是高性能缓存服务器,举个例子。web
比如咱们要去买东西,全部的咱们须要的东西是在超市厂家生产出来的,咱们须要的话去超市厂家取。这表明离服务器端近。算法
在比如咱们要去超市买东西,这个超市厂家负责送货到家门口楼下的超市,那咱们确定选择离咱们本身近的。这就是表明离客户端近。chrome
而缓存的功能就是把客户端常常须要“买”的东西送到客户端门口,毕竟web的存在就是为了给客户端提供服务的,因此缓存是一个很是重要的概念。那怎么把数据送到客户端门口呢,咱们最常接触的就是浏览器缓存,好比你访问过一个网站,第一次打开须要加载,可是若是你打开了第二个页面感受又想回到上一个页面直接返回就能够,此时并不须要从新加载,这就是缓存的一种。vim
时间局部性:一个数据被访问过以后,被统计接下来被访问的几率。后端
空间局部性:一个数据被访问时,周边数据被访问的几率。centos
这些称为缓存的热区,那空间满了怎么办?使用LRU算法,根据时间最近和频率最少使用来清理缓存。浏览器
还有须要注意的一点是,以上全部的数据都是通过客户端一段时间的访问来统计出来的,并且要知道缓存是重启失效的,因此你懂得,没事能够把服务器常常关机或者重启试试,确定特别刺激。缓存
/etc/varnish/default.vcl服务器
}
}
}
/etc/varnish/varnish.params
VCL配置文件重载:varnish_reload_vcl
centos 1 192.168.150.161 安装httpd
centos 2 192.168.150.160 安装varnish
编辑centos 1 httpd配置文件;
[root@localhost: script]# vim /var/www/html/index.html <h1> centos7.3 httpd test page </h1>
systemcel start httpd ##启动服务;
编辑centos 2 varnish 配置文件 ;
[root@localhost: script ]# vim /etc/varnish/varnish.params ##程序选项文件,配置varnish服务进程的工做特性,例如监听地址端口以及缓存机制;
......
13 # VARNISH_LISTEN_ADDRESS=192.168.1.5 ##监听在哪一个地址,这里注释了表明监听在本机全部的IP;
14 VARNISH_LISTEN_PORT=80 ##监听本机的哪一个端口默认为6081;
15
16 # Admin interface listen address and port ##配置管理员选项;
17 VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 ##监听在本机那个IP;
18 VARNISH_ADMIN_LISTEN_PORT=9877 ##监听在本机那个端口;
.....
24 # man page for details.
25 VARNISH_STORAGE="file,/data/varnish,1g" ##默认存在缓存中这里配置为存在磁盘,文件目录,以及文件大小,目录须要手动建立而且须要设置varnish用户为属主与属组;
......
[root@localhost: script ]# /etc/varnish/default.vcl ##配置各Child/Cache线程的缓存策略,先把httpd配置为后端主机;
......
15 # Default backend definition. Set this to point to your content server.
16 backend default { ##定义后端主机;
17 .host ="192.168.150.161"; ##默认是127.0.0.1,改成httpd服务器IP;
18 .port = "80"; ##默认为8080,改成80;
19 }
20
21 sub vcl_recv {
22
22
23 if (req.method != "GET" && ##设置默认策略,请求方法若是不是GET,HEAD,PUT,POST,TRACE,IPTIONS,DELETE,其中一个,则跳转至pipe,避免有比较老的系统不能访问网站;
24 req.method != "HEAD" &&
25 req.method != "PUT" &&
26 req.method != "POST" &&
27 req.method != "TRACE" &&
28 req.method != "OPTIONS" &&
29 req.method != "DELETE") {
30 return (pipe);
31 }
32
33 if (req.method != "GET" && req.method != "HEAD") { ##若是请求方法不是GET,HEAD则跳转至pass;
34 return (pass);
35 }
36 if (req.http.Authorization || req.http.Cookie) { ##若是请求中有认证相关的信息或者cookie信息则跳转至pass;
37 return (pass);
38 }
39 return (hash);
40 }
[root@station103: varnish]# mkdir /data/varnish -pv ##建立缓存文件目录
systemctl start varnish ##启动服务
使用浏览器访问192.168.150.160 基本框架已经搭好。
配置centos 1
[root@localhost: varnish]# mkdir /var/www/html/{login,admin} -pv
[root@localhost: varnish]# echo 1111 > /var/www/html/login/index.html
[root@localhost: varnish]# echo 1111 > /var/www/html/admin/index.html
配置centos 2
[root@localhost: varnish]# vim /etc/varnish/default.vcl
sub vcl_recv {
if (req.url ~ "(?i)^/(login|admin)") { ##表示若是访问的是login或者admin任何文件则去硬盘中找;
return(pass);
}}
[root@localhost: varnish]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:9877 ##交互式登陆 -S 指定秘钥文件 -T 指定本机127.0.0.1以及本身配置的端口;
vcl.load test1 default.vcl ##从default.vcl配置文件中装载进缓存,命名为 test1,须要注意,这里是装载进的缓存,重启失效。使用vcl.show test1 能够查看配置 加 -v显示详细配置;
200
VCL compiled.vcl.list ##查看全部列表,test1已经存在 可是非活动状态;
200
active 0 boot
available 0 test1vcl.use test1 ##启用test1
200
VCL 'test1' now active
查看访问网页 http://192.168.150.160/login/由于有关键字,摁F12,能够看到并无缓存
[root@station103: varnish]# vim /etc/varnish/default.vcl
sub vcl_deliver { ## 定义
if (obj.hits>0) { ##若是访问记录大于等于1次;
set resp.http.X-Cache = "HIT via " + server.ip; ## 自定义首部 为HIT vai + IP,空格要本身加 看起来整齐一点;
} else { ##不然;
set resp.http.X-Cache = "MISS via " + server.ip; ## 自定义首部为 MISS via ;
}}
记得本身要去 varnish交互式界面同步 ;
vcl.load test2 default.vcl
200
VCL compiled.
vcl.use test2 ##生效新的配置test2
200
VCL 'test2' now active
第一次访问 MISS
第二次刷新 已经显示HIT;
清缓存
ban(banning)为禁用缓存 使用方法同样 ;
vim /etc/varnish/default.vcl
acl purgers { ##首先要定义组
"127.0.0.1"/8;
"192.168.150.160"/16;
}sub vcl_recv {
if (req.method == "PURGE") { ##若是请求方法是PURGE;
if (!client.ip ~ purgers) { ##基于上面的基础 若是请求的IP 为定义的acl控制purgers组内的IP;
return(synth(405,"Purging not allowed for " + client.ip)); ##返回值为405 中间加上内容 后面加上访问者IP;
}
return(purge); ##跳转至PURGE;
} ##这样若是客户端请求过有缓存的话使用purge方法请求一次会清空缓存;在访问就会MISS}
使用curl 方法指定请求方法来访问验证试验结果;
[root@station103: /root]# curl -I http://192.168.150.160/index.html ##先请求 为HIT 表明有以前有缓存;
HTTP/1.1 200 OK
Date: Sat, 01 Jul 2017 11:35:42 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
Last-Modified: Sat, 01 Jul 2017 02:56:40 GMT
ETag: "25-55338aedeff49"
Content-Length: 37
Content-Type: text/html; charset=UTF-8
X-Varnish: 62 52
Age: 112
Via: 1.1 varnish-v4
X-Cache: HIT via 192.168.150.160 ##显示为HIT
Connection: keep-alive[root@station103: /root]# curl -X PURGE http://192.168.150.160/imdex.html<!DOCTYPE html> ##使用PURGE 方法请求;
<html>
<head>
<title>405 Purging not allowed for 192.168.150.160</title>
</head>
<body>
<h1>Error 405 Purging not allowed for 192.168.150.160</h1> ##返回值为咱们设定的405 以及IP ;
<p>Purging not allowed for 192.168.150.160</p>
<h3>Guru Meditation:</h3>
<p>XID: 65584</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
[root@station103: /root]# curl -I http://192.168.150.160/index.html ##再次请求发现MISS;
HTTP/1.1 200 OK
Date: Sat, 01 Jul 2017 11:38:10 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
Last-Modified: Sat, 01 Jul 2017 02:56:40 GMT
ETag: "25-55338aedeff49"
Content-Length: 37
Content-Type: text/html; charset=UTF-8
X-Varnish: 65586
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS via 192.168.150.160 ##MISS 表明缓存已清空
Connection: keep-alive
定义多个虚拟主机;
[root@station103: varnish]# vim /etc/varnish/default.vcl
13 vcl 4.0;
14
15 import directors; ##首先必定要调用这个模块,不然不能定义;
16
......
22 backend web1 { ##定义backend主机1
23 .host ="192.168.150.161";
24 .port = "80";
25 }
26 backend web2 { ##定义backend主机2;
27 .host ="192.168.150.152";
28 .port = "80";
29 }
30 sub vcl_init { ##初始化组
31· new web = directors.round_robin(); ##定义web为组名,directors为模块, round_robin为调度方法;
32 web.add_backend(web1); ##添加主机1至web组,是能够加权重的,若是加权重是这样写(web1,2)主机名字后面逗号隔开写上权重;
33 web.add_backend(web2); ##添加主机2至web组;
34 }
35
36
37 sub vcl_recv {
38
39 set req.backend_hint = web.backend(); ##调用组40 }
此时添加了一个主机 centos 3 IP为192.168.150.152
安装httpd
[root@localhost ~]# mkdir /var/www/html/{login,admin} -pv
[root@localhost ~]# echo centos7.3 httpd test page2 > /var/www/html/login/index.html
[root@localhost ~]# systemctl start httpd
centos 1
[root@localhost: /root]# echo centos7.3 httpd test page1 > /var/www/html/login/index.html
由于须要测试,因此不能使用有缓存的文件,特意建立一个login目录,(以前有设置过权限)内容不统一,方便查看测试效果。
轮询效果实现;
loading.....