主机环境: rhel6 selinux and iptables disabled
实验主机: 192.168.2.36 varnish
192.168.2.46 apache
192.168.2.38 apache
框架图:

wKiom1PoLRaRPLtCAAHOC02-kWU148.jpg

VCL 处理流程图:

wKioL1PoLpfgJPyfAAFVMucrGXs454.jpg

处理过程大致分为如下几个步骤:
(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

wKiom1PoL1bA4YvcAAKfnsf-DgE769.jpg未命中

#curl -I 192.168.2.36

wKiom1PoMRiQZ8dXAAKfqHcAPjw790.jpg命中

###通过 varnishadm 手动清除缓存
# varnishadm ban.url .*$ #清除所有
# varnishadm ban.url /index.html #清除 index.html 页面缓存
# varnishadm ban.url /admin/$ #清除 admin 目录缓存
###定义多个不同域名站点的后端服务器
wKioL1PoM02QkmZHAADXBsTgPmY554.jpg

#当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。

wKiom1PoMpzi9QdKAAGiO8drZxA191.jpg

#service varnish reload

###定义负载均衡
#定义健康检查
wKioL1PoNGPBgl3QAAK3b-DrbMA682.jpg

wKioL1PoNUnTmXskAAKBlpuQ3w8757.jpg

wKioL1PoNnzCeEHlAAM_N0HKrug489.jpg

#/etc/init.d/varnish reload

在desktop38上配置虚拟主机名vim /etc/httpd/conf/httpd.conf

wKioL1PoNurD9r93AAFN_403M8E736.jpg

在desktop38的/var/www/下创建web2目录在里面写一个测试文件

wKioL1PoOAXQgi0bAACt1friiRE840.jpg

#/etc/init.d/httpd restart  

然后测试:

wKiom1PoNxDwrSiPAABm007VUQQ665.jpg

wKioL1PoOCqzZotEAABpX8BVTzo508.jpg

wKioL1PoOF_ykNFnAABT85k1Oo4959.jpg

###varnish cdn 推送平台
http://code.google.com/p/varnish-php-bansys/
把这个解压到 desktop36 的/var/www/html/

wKiom1PoP7Hw1NvSAADKjV4uato492.jpg

然后编辑config.php

#只保留如下设置,其余注释掉
wKiom1PoQJDDy-s2AAHR-UeKx3U614.jpg

#编辑desktop36的httpd配置文件

#vim /etc/init.d/httpd/conf/httpd.conf

把监听端口改为 8080 不然就和varnish的端口起冲突

推送模式是http的话对varnish做如下配置:

wKiom1PoQcbgW6K6AAFxyNgvj9Q317.jpg

#/etc/init.d/varnish reload

然后在firefox上测试:

wKioL1PoQyTwKtZuAAEE70EJGt4408.jpg

wKiom1PoQmCDTraHAACuLvg6-Xc097.jpg

OK!!