一、简介
CDN的全称是Content Delivery Network,其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定.
二、用varnish实现cdn
Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。
服务器(3个):172.25.4.1 172.25.4.2 172.25.4.3
1.安装包
varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
2.安装
yum install varnish * -y
3.修改varnish监听的端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
4.修改/etc/varnish/default.vcl
backend web1 { ##配置后端服务器
.host = "172.25.4.2";
.port = "80";
}
backend web2 {
.host = "172.25.4.3";
.port = "80";
}
5.开启varnish
/etc/init.d/varnish start
实验一:测试缓存命中情况:
在default.vcl里面添加
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
/etc/init.d/varnish reload
测试:
在客户端添加解析:
vim /etc/hosts
172.25.4.1 www.westos.org westos.org bbs.westos.org
用varnishadm清一下缓存,下次访问就不会从缓存中读取
### 通过 varnishadm 手动清除缓存
varnishadm ban.url .*$
#清除所有
varnishadm ban.url /index.html
#清除 index.html 页面缓存
varnishadm ban.url /admin/$
#清除 admin 目录缓存
实验二:负载均衡
如果找不到就到web1,或web2上找,web1、web2是apache
vim /etc/varnish/default.vcl
backend web1 { ##配置后端服务器
.host = "172.25.4.2";
.port = "80";
}
backend web2 {
.host = "172.25.4.3";
.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";
}
}
重启varnish
/etc/init.d/varnish reload
在客户端测试要做的:
修改客户端的/etc/hosts
用浏览器访问:如果不出错的话,一只刷新页面会发现一会是web1的发布页,一会儿是web2的发布页
实验三:cdn管理系统
varnish帮我们缓存很多的web资源,但是当后台的数据有了变化需要更新怎么办,此时就需要用到CDN的推送管理了
1.安装apache,PHP,设置apache在8080端口,并且启动服务
yum install httpd php -y
/etc/init.d/httpd start
2.将bansys.zip解包,包里面的内容统统放到apache的发布目录下
unzip bansys.zip -d /var/www/html
3.修改发布目录下的config.php
vim /var/www/html/bansys/config.php #只保留如下设置,其余注释掉
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.4.1'),
'port' => '80',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
'bbs.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
在http模式对varnish进行如下设置:
vim /etc/varnish/default.vcl
acl westos {
"127.0.0.1";
"172.25.4.0"/24;
}
backend web1 {
.host = "172.25.4.2";
.port = "80";
}
backend web2 {
.host = "172.25.4.3";
.port = "80";
}
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
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";
}
}
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);
}