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

varnish反向代理安装与配置_CDN

VCL 处理流程图:

varnish反向代理安装与配置_varnish_02

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

varnish反向代理安装与配置_varnish_03未命中

#curl -I 192.168.2.36

varnish反向代理安装与配置_varnish_04命中

###通过 varnishadm 手动清除缓存
# varnishadm ban.url .*$ #清除所有
# varnishadm ban.url /index.html #清除 index.html 页面缓存
# varnishadm ban.url /admin/$ #清除 admin 目录缓存
###定义多个不同域名站点的后端服务器
varnish反向代理安装与配置_CDN_05

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

varnish反向代理安装与配置_推送_06

#service varnish reload

###定义负载均衡
#定义健康检查
varnish反向代理安装与配置_CDN_07

varnish反向代理安装与配置_CDN_08

varnish反向代理安装与配置_varnish_09

#/etc/init.d/varnish reload

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

varnish反向代理安装与配置_推送_10

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

varnish反向代理安装与配置_CDN_11

#/etc/init.d/httpd restart  

然后测试:

varnish反向代理安装与配置_CDN_12

varnish反向代理安装与配置_推送_13

varnish反向代理安装与配置_varnish_14

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

varnish反向代理安装与配置_CDN_15

然后编辑config.php

#只保留如下设置,其余注释掉
varnish反向代理安装与配置_varnish_16

#编辑desktop36的httpd配置文件

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

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

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

varnish反向代理安装与配置_推送_17

#/etc/init.d/varnish reload

然后在firefox上测试:

varnish反向代理安装与配置_varnish_18

varnish反向代理安装与配置_推送_19

OK!!