实验环境:varnish版本:3.0.5 172.25.60.1 varnish 172.25.60.250 apache 172.25.60.2 apache
yum install -y varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
配置
# vim /etc/varnish/default.vcl ###配置一个后端服务器
backend web1 {
.host = "172.25.60.250";
.port = "80";
}
# vi /etc/sysconfig/varnish ###配置 varnish 服务端口
VARNISH_LISTEN_PORT=80
测试: 访问varnish实际上是访问后端apache
###查看缓存命中情况
vim /etc/sysconfig/varnish
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);
}
VARNISH_TTL=3 #缓存存在时间三秒
### 通过 varnishadm 手动清除缓存
# varnishadm ban.url .*$ #清除所有
# varnishadm ban.url /index.html #清除 index.html 页面缓存
# varnishadm ban.url /admin/$ #清除 admin 目录缓存
###定义多个不同域名站点的后端服务器
# vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.60.250";
.port = "80";
}
backend web2 {
.host = "172.25.60.2";
.port = "80";
}
#当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。
# vim /etc/sysconfig/varnish
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
测试:
###负载均衡
#定义健康检查
# vim /etc/varnish/default.vcl
probe healthcheck {
.url = "/index.html"; #哪个 url 需要 varnish 请求
.interval = 5s; #检查的间隔时间
.timeout = 1s; #等待多长时间探针超时
.window = 5; #维持 5 个 sliding window 的结果
.threshold = 3; #至少有三次 window 是成功的,就宣告 bachend 健康
}
# 定义负载均衡
# vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.60.250";
.port = "80";
}
backend web2 {
.host = "172.25.60.2";
.port = "80";
}
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
测试:
关闭一台apache测试: