1、cdn的见大介绍
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度
2、http加速器:varnish
Varnish 是一个 web 加速器,被安装在 web 应用程序前面,缓存 web 应用程序,并响应用户请求,varnish 让您的 web 应用程序运行的更快,并且 varnish 灵活好用。
3、安装varnish
yum localinstall -y varnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm
4、对配置文件进行相应的改变
[root@cdn varnish]# vim /etc/sysconfig/varnish
这里的端口改为80的原因是:在用户体验时,均是直接访问浏览器的http服务,不会在后面加:(端口号),所以在实际体验中。是要将varnish服务的端口号改为80端口的。
[root@cdn varnish]# vim /etc/varnish/default.vcl
此文件的varnish的配置文件,在修改varnish的一些选项时,都是在此文件进行修改的。
172.25.71.2是真正开启apahce服务端口的real server,
测试:在测试时,只需要将开启varnish的服务器写入本地解析文件即可
测试时,www.zhaoyan.com是从172.25.71.6的主机上传来的信息,这正是varnish服务开启的主机
在浏览器中,经常会有一个缓存,来存储连接相近的一些信息,当用户在短时间进行再次访问时,是直接进行查找内存中的信息的,这样会减少后台服务器的压力。
[root@cdn varnish]# vim /etc/varnish/default.vcl
sub vcl_deliver {
if (obj.hits > 0) { 一旦被投递了这个对象,如果其内部个数大于0,那么则命中
set resp.http.X-Cache = "HIT from zhaoyan cache"; #意思是再次访问时,是在内存中进行读取内容的
}
else {
set resp.http.X-Cache = "MISS from zhaoyan cache"; #否则是从后台取调取内容的
}
return (deliver);
}
因为上次访问过www.zhaoyan.com,所以为了测试方便,进行访问清除
手动清除命令
### 通过 varnishadm 手动清除缓存
# varnishadm ban.url .*$
#清除所有
# varnishadm ban.url /index.html
#清除 index.html 页面缓存
# varnishadm ban.url /admin/$
#清除 admin 目录缓存
测试:因为已经进行三手动清除,所以是MISS from zhaoyan cache
在没有进行手动清除时,应该在相应的时间内是是从内存进行读取的
[root@cdn varnish]# vim /etc/sysconfig/varnish
默认是在120秒内进行读取内存的内容的
定义多个不同域名站点的后端服务器
backend web1 {
.host = "172.25.71.2";
.port = "80";
}
backend web2 {
.host = "172.25.71.3";
.port = "80";
}
#当访问 www. 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。
sub vcl_recv {
if (req.http.host ~ "^(www.)?zhaoyan.com") { #当访问zhaoyan.com或者www.zhaoyan.com时
set req.http.host = "www.zhaoyan.com"; #访问的主机都是www.zhaoyan.com
set req.backend = web1; #调度的是web1主机的内容
} elsif (req.http.host ~ "^bbs.zhaoyan.com") { #当访问的是bbs.zhaoyan.com时,调度的是web2主机的内容
set req.backend = web2;
} else {error 404 "zhaoyan cache"; #否则是404没有找到的报错
}
}
测试:
因为web1,web2都有www.zhaoyan.com的服务,在调度时,进行调度的一个负载均衡的测试
[root@cdn varnish]# vim default.vcl
director lb round-robin{ #进行一个定义,在访问www.zhaoyan.com时,在web1web2之间进行一个轮循
{.backend = web1;} ##使用的时rr轮叫算法
{.backend = web2;}
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?zhaoyan.com") {
set req.http.host = "www.zhaoyan.com";
set req.backend = lb; ##在访问时,在定义的lb进行一个循环
return(pass); ##在实际应用时,是不会进行return(pass);浏览器肯定会有一个内置的缓存,以减轻服务器的压力
} elsif (req.http.host ~ "^bbs.zhaoyan.com") {
set req.backend = web2;
} else {error 404 "zhaoyan cache";
}
}
##再次再次说明一下return(pass)的作用,为了方便测试,加上这一条策略是省去了手动清除缓存的命令,也可以使用另一个方法,在/etc/sysconfig/varnish文件中将TTL缩小即可,在实际使用中,会有自己的TTL值。
测试:实现了轮叫,减轻了后台服务器的压力
varnish推送平台:
存在的意义,在一些活动中,活动方为了尽快使客户端能受到最新的消息,而此时却又浏览器的缓存设置,就产生了推送平台这个东西,客户端在访问时,都是访问的是调度器,所以为了将最新的消息发送,使用了缓存推送,###在此次测试时,必须将上面设置的return(pass)策略删除,
bansys.zip为所使用的推送包
此次实验使用的推送平台是使用php语言写的,需要下载php包
缓存推动平台是在网页中打开的,所以也需要httpd服务,但是varnish已经将80端口占了,所作的都是为了varnish进行服务,所以经apahce的端口进行嗯修改
最终,在varnish服务器上的公共发布目录中会有一下的
[root@cdn html]# ls
class_socket.php config.php index.php purge_action.php static<?php
[root@cdn html]# vim config.php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.71.6'), #使用varnish的主机
'port' => '80', ##varnish主机所使用的端口是80
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.zhaoyan.com' => $var_group1, ##要推送的是www.zhaoyan.com,使用var_group1进行推送的
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3"; #查看varnish的版本,我使用的是3.x的版本
?>
手动清除缓存后,在还没有达到TTL值时,已经进行了更新