主机环境: rhel6 selinux and iptables disabled
实验环境:
主机 | 服务 |
---|---|
server1:172.25.63.1 | varnish |
server2:172.25.63.2 | apache |
server3:172.25.63.3 | apache |
处理过程大致分为如下几个步骤:
(1) Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或 Pipe,或者进入 Lookup(本地查询)。
(2) Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进入 miss 状态。
(3) Pass 状态,在此状态下,会进入后端请求,即进入 fetch状态。
(4) Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地的存储。
(5) Deliver 状态,将获取到的数据发送给客户端,然后完成本次请求。
一、部署单个后端服务器的过程
1.把varnish安装包传给server1(此安装包在官网已经下载好了)
2.安装软件
3.查看varnish的配置文件
4.查看varnish配置信息
5.安装完成后,会自动生成varnish用户
6.查看文件数,最大打开文件数为98864,与varnish配置文件的最大打开文件数不匹配
要使最大打开文件数与varnish配置文件的最大打开文件数匹配
进行以下操作:关闭server1,进入虚拟机管理页面,修改memory为2048
重新连接再次查看最大打开文件数为188464,与varnish配置文件的最大打开文件数匹配
6.进入varnish配置文件,修改端口为80
7.查看系统允许的线程数
8.切换到/etc/security目录下,编辑limits文件,使其配置与varnish配置匹配
文件添加内容如下:
9.切换到/etc/varnish目录下,编辑default.vcl文件
修改ip为vm2的ip
10.开启varnish服务
11.查看varnish的端口号是否为80
- server2的配置:
1.安装httpd
2.切换到/var/www/html,编辑index.html
3.重启httpd服务
4.测试:在浏览器中访问server1ip出现server2内容
二、CDN清除缓存
1.编辑default.vcl配置文件
[root@server1 varnish]# vim default.vcl
##配置一个后端服务器
backend web1 {
.host = "172.25.63.2";
.port = "80";
}
##查看缓存命中情况
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
2.重启varnish服务
[root@server1 varnish]# /etc/init.d/varnish reload
3.真机里curl -I 172.25.63.1 第一次没有缓存到,是MISS
再次访问,第二次缓存到是HIT(后边一直是HIT)
4.清除所有缓存
[root@server1 varnish]# varnishadm ban.url .*$
5.真机里再次curl -I 172.25.63.1显示MISS,表示缓存已经清楚成功,否则仍为HIT
6.真机里curl -I 172.25.63.1/index.html第一次没有缓存到,是MISS
再次访问,第二次缓存到是HIT(后边一直是HIT)
7.清除index.html缓存
[root@server1 varnish]# varnishadm ban.url /index.html
8.真机里再次curl -I 172.25.63.1/index.html显示MISS,表示缓存已经清楚成功,否则仍为HIT