主机环境: rhel6 selinux and iptables disabled
实验主机: 192.168.2.36 varnish
192.168.2.46 apache
192.168.2.38 apache
框架图:
VCL 处理流程图:
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
1. 安装
http://repo.varnish-cache.org/redhat/varnish-3.0/el6/x86_64/
rpm -ivh varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
2. 配置
# vi /etc/varnish/default.vcl
###配置一个后端服务器
backend web1 {
.host = "192.168.0.188";
.port = "80";
}
###配置 varnish 服务端口
# vi /etc/sysconfig/varnish
VARNISH_LISTEN_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);
}
# service varnish start
在desktop46上安装httpd 并启动
#curl -I 192.168.2.36
#curl -I 192.168.2.36
###通过 varnishadm 手动清除缓存
# varnishadm ban.url .*$ #清除所有
# varnishadm ban.url /index.html #清除 index.html 页面缓存
# varnishadm ban.url /admin/$ #清除 admin 目录缓存
###定义多个不同域名站点的后端服务器
#当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。
#service varnish reload
#/etc/init.d/varnish reload
在desktop38上配置虚拟主机名vim /etc/httpd/conf/httpd.conf
在desktop38的/var/www/下创建web2目录在里面写一个测试文件
#/etc/init.d/httpd restart
然后测试:
###varnish cdn 推送平台
http://code.google.com/p/varnish-php-bansys/
把这个解压到 desktop36 的/var/www/html/
然后编辑config.php
#编辑desktop36的httpd配置文件
#vim /etc/init.d/httpd/conf/httpd.conf
把监听端口改为 8080 不然就和varnish的端口起冲突
推送模式是http的话对varnish做如下配置:
#/etc/init.d/varnish reload
然后在firefox上测试:
OK!!