CDN简介:
CDN(Content Delivery Network)是指内容分发网络,也称为内容传送网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
Varnish简介:
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
用varnish实现cdn:
在当前主流的Web架构中,Cache担任着越来越重要的作用。常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。
环境:
配置三台虚拟机,与物理机的私有ip处于同一网段,并搭建好yum源
server1 | 172.25.60.1 |
---|---|
server2 | 172.25.60.2 |
server3 | 172.25.60.3 |
网关:都设为物理机ip
firewalld:disable
selinux:disabled
此次实验中: server1为varnish代理服务器,server2,server3为http服务器
1.搭建Varnish服务器
server2:
(1)安装httpd
yum install httpd -y
(2)编辑默认发布文件,随便写点东西
vim /var/www/html/index.html
(3)开启httpd服务
systemctl start httpd
server1:
(1)获取安装包并安装
安装包:
jemalloc-3.6.0-1.el7.x86_64.rpm
varnish-libs-4.0.5-1.el7.x86_64.rpm
varnish-4.0.5-1.el7.x86_64.rpm
安装:
yum install jemalloc-3.6.0-1.el7.x86_64.rpm varnish-*
(2)编辑 /etc/varnish/varnish.params 修改端口为80
(3)编辑 /etc/varnish/default.vcl 添加需要代理的服务器的信息(ip和端口号)
(4)开启varnish
systemctl start varnish
测试:
物理机访问server1,代理server1将访问它的转到了server2上,访问时可以看到我们刚才在server2的httpd的默认发布文件中编写的内容
2.查看缓存命中情况
server1:
(1)编辑 /etc/varnish/default.vcl
(2)重启varnish
systemctl restart varnish
测试: 物理机
curl -I 172.25.60.1
3.清空缓存
默认缓存时间为120秒,可以通过 varnishadm 命令手动清除缓存
varnishadm ban.url "~" / //清除所有
varnishadm ban.url "~" /index.html //清除index.html页面缓存
4.定义多个不同域名站点的后端服务器
server3:
(1)安装httpd
yum install httpd -y
(2)编辑默认发布文件,随便写点东西
vim /var/www/html/index.html
(3)开启httpd服务
systemctl start httpd
server1:
(1)编辑 /etc/varnish/default.vcl
backend web1 {
.host = "172.25.60.2";
.port = "80";
}
backend web2 {
.host = "172.25.60.3";
.port = "80";
}
当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = lb.backend();
}
elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
}
else {
return (synth(405));
}
(2)重启varnish
systemctl restart varnish
测试:
(1)编辑本地解析文件 /etc/hosts
(2)访问:www.westos.org 和 bbs.westos.org
根据本地解析,都解析到了172.25.60.1(server1),它通过varnish的配置文件规则访问不同的服务器
注:
curl -I www.westos.org与curl -I www.westos.org/index.html 是不同的
5.实现负载均衡(采用轮询)
server1:
(1)编辑配置文件 /etc/varnish/default.vcl
##导入directors模块,进行轮询等操作
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";
##定义负载均衡模式
sub vcl_init {
new lb = directors.round_robin(); //轮询上面定义的两个站点web1和web2
lb.add_backend(web1);
lb.add_backend(web2);
}
##修改访问模式
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = lb.backend();
#访问www.westos.org去轮询web1h和web2
return(pass)
#因为存在缓存,为了测试方便,不进行缓存。
}
elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
#访问bbs.westos.org时去访问web2
}
else {
return (synth(405));
}
}
(2)重启varnish
systemctl restart varnish
测试:
根据配置,访问 www.westos.org 时轮询访问两个站点web1和web2,访问 bbs.westos.org 时访问web2
注: 做完实验记得将刚才设置的return(pass)注释或删除;在实际中我们是不需要这样做的。
6.虚拟主机 + Varnish:实现负载均衡
server3:
(1)建立两个发布目录,编辑发布文件
mkdir /www /bbs
vim /www/index.html
#写入:www
vim /bbs/index.html
#写入:bbs
(2)进入apache子配置目录 /etc/httpd/conf.d/ ,编辑子配置文件(*.conf)
cd /etc/httpd/conf.d/
ls
vim vhost.conf
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
<Directory "/www">
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
<Directory "/bbs">
Require all granted
</Directory>
(3)重启apache服务
systemctl restart httpd
注: 还是轮询测试,将配置文件 /etc/varnish/default.vcl 中的return(pass)打开
测试: 物理机
访问www.westos.org,去轮询轮询server3中的/www/index.html和server2中的/var/www/html/index.html
访问bbs.westos.org,去访问server3中的/var/www/html/index.html
7.推送平台----图像化管理(清理)缓存
server1:
(1)获取推送平台的压缩包
(2)安装推送平台所需的软件(因为我的虚拟机是最小化安装,所以还需要unzip解压工具)
yum install httpd php unzip -y
(3)将推送平台解压到 /var/www/html/ ,并将解压的文件放到这个目录下
unzip bansys.zip -d /var/www/html/ #-d指定解压路径
cd /var/www/html/
ls
mv bansys/* . #把解压的内容移到上以及目录/var/www/html
(4)配置 config.php 文件
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.60.1'),
'port' => '8080',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.crg' => $var_group1, #
);
?>
(5)此时推送平台就做好了,但为了安全,还应设置权限。编辑 /etc/varnish/default.vcl
acl westos { #设置访问控制
"127.0.0.1"; #允许自己
"172.25.60.0"/24; #允许172.25.60/24网段
}
if (req.method == "BAN") {
if (!client.ip ~ westos) {
return (synth(405,"Not allowed."));
}
ban("req.url ~ " + req.url);
return(purge);
}
(6)在物理机的浏览器中打开推送平台
测试:
推送指定的网页 | /index.html |
---|---|
推送所有的 | .* |
以所有的为例: