VARNISH
安装
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
后端服务器配置
server1
vim /etc/sysconfig/varnish
66 VARNISH_LISTEN_PORT=80 ##varnish服务端口为80,但要注意http端口80,不要开启httpd服务否则有矛盾
vim /etc/varnish/default.vcl
backend web1 { ##后端为web1
.host = "172.25.36.2"; ##主机为172.25.36.2
.port = "80"; ##通过80端口
/etc/init.d/varnish restart ##重启varnish
server2
yum install httpd
/etc/init.d/httpd start
vim /var/www/html/index.html
cat /var/www/html/index.html
<h1>server2.westos.org</h1>
测试:
curl -I www.westos.org
查看缓存命中情况
vim /etc/varnish/default.vcl
sub vcl_deliver {
if (obj.hits > 0) { ##若命中缓存,则输出"HIT..."
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";##若缓存没有命中,则输出"MISS"
}
return (deliver);
}
测试:
curl -I www.westos.org
MISS
HIT
通过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.36.2"; ##后端为172.25.36.2
.port = "80"; ##访问端口80
backend web2 {
.host = "172.25.36.3";
.port = "80";
}
sub vcl_recv{
if (req.http.host ~ "^(www.)?westos.org"){ ##访问(www.)westos.org时通过web1进行访问
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") { ##访问bbs.westos.org时通过web2进行访问
set req.backend = web2;
} else { error 404 "westos cache";
}
}
当访问www.westos.org域名时从web1上取数据,访问bbs.westos.org域名时从web2上取数据,访问其他页面报错。
测试:
提前在真机上添加解析
- curl -I www.westos.org
curl -I bbs.westos.org
curl -I 172.25.36.1
负载均衡
server1:
director lb round-robin { ##将多个后端聚合为一个组lb进行轮询
{ .backend = web1; }
{ .backend = web2; }
}
vim /etc/varnish/default.vcl
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb; ##当访问www.westos.org时访问lb组
return (pass); ##为了测试方便,不进行缓存
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else { error 404 "westos cache";
}
}
server2:
mkdir /www/bbs -p
mkdir /www/westos
cd /www/bbs/
vim index.html
1 bbs.westos.org
cd /www/westos/
vim index.html
1 westos.org
vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName server2
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/bbs
ServerName bbs.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/westos
ServerName www.westos.org
990 NameVirtualHost *:80 ##开启虚拟主机80端口
/etc/init.d/httpd restart ##重启服务
在server2上添加www.westos.org bbs.westos.org的解析以便访问
测试:
172.25.36.2 轮询
varnish CDN 推送
安装php支持
(yum install unzip -y)
unzip bansys.zip -d /var/www/html/
cd /var/www/html/bansys/
mv * ..
rm -fr bansys/
yum install php
/etc/init.d/httpd start
修改httpd为8080端口
vim /var/www/html/config.php
##定义主机列表
$var_group1 = array(
'host' => array('172.25.36.1',),
'port' => '80',
);
##对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
#bansys 有两种工作模式,分别是:telnet 和 http 模式。
#telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S ${VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
#如果是 http 模式需要对 varnish 做以下设置:
vim /etc/varnish/default.vcl
acl westos { ##设置访问控制
"127.0.0.1";
"172.25.36.0"/24;
}
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
将default.vcl中return (pass)注释,保留缓存
测试:
- www.westos.org/index.html
- 172.25.36.1:8080
- 推送内容:index.html
- 推送成功会刷新页面轮询
- www.westos.org/index.html