Linux学习 CDN加速
2017-08-18 19:35
323 查看
CDN加速--varnish
一、CDN:内容分发网络,可加速网站访问
接入层(CDN):代理层,支持Haproxy。其中反向代理有:varnish、squid
二、varnish工作原理
<1>在server1端安装varnish主程与库文件,并进行配置
1.yum insatll varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
2.vim /etc/sysconfig/varnish ##全局配置文件
编辑内容如下:
66 VARNISH_LISTEN_PORT=80 ##将监听端口改为80,方便检测
![](https://img-blog.csdn.net/20170818192723791?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
解释部分语句:
70 VARNISH_ADMIN_LISTEN_PORT=6082 ##管理员端口
76 VARNISH_MIN_THREADS=50 ##最小线程数
79 VARNISH_MAX_THREADS=1000 ##最大线程数
82 VARNISH_THREAD_TIMEOUT=120 ##单线程timeout为120s
89 VARNISH_STORAGE_SIZE=1G ##可存数据大小
95 VARNISH_TTL=120 ##缓存过期时间为120s
3.vim /etc/varnish/default.vcl
添加内容:
7 backend default {
8 .host ="172.25.13.2"; ##后端服务器为172.25.13.2
9 .port = "80";
4. /etcinit.d/varnish start ##开启服务
<2>server2与server3端安装httpd,并开启服务
1.yum install httpd -y
2./etc/init.d/httpd start
3.vim /var/www/html/index.html ##编辑apache默认发布文件
<h1>server2</h1>
:wq
server3端同上
<3>测试
浏览器中访问172.25.13.1,测试结果显示如下:
![](https://img-blog.csdn.net/20170818192730784?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
<4>查看缓存命中情况
1.vim /etc/varnish/default.vcl
添加内容如下:
subvcl_deliver {
if(obj.hits > 0) {
set resp.http.X-Cache = "HIT fromwestos cache";
} ##如果缓存命中将显示"HIT from westos cache"
else{
set resp.http.X-Cache = "MISS fromwestos cache";
} ##若为命中缓存将显示"MISS from westos cache"
return(deliver);
}
![](https://img-blog.csdn.net/20170818192735084?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2./etc/init.d/varnish reload ##重新加载--不用断开连接,直接刷新
3.测试
为方便后续实验,在测试端添加解析:
![](https://img-blog.csdn.net/20170818192739644?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
第一此访问,无缓存记录即未命中缓存,显示"MISS from westos cache"
![](https://img-blog.csdn.net/20170818192744303?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
再次访问时命中缓存,显示"HITfrom westos cache"
![](https://img-blog.csdn.net/20170818192748932?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170818192753215?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、varnish缓存的清除
varnishadm ban.url .*$ #清除所有
varnishadm ban.url /index.html #清除 index.html 页面缓存
varnishadm ban.url /目录名/$ ##清除目录缓存,可通过Apache访问的目录
清除缓存后再访问时,varnish将访问后端服务器。可以通过Age显示来判断
![](https://img-blog.csdn.net/20170818192757490?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、定义多个不同域名站点的后端服务器
<1>varnish端操作
1.vim /etc/varnish/default.vcl
添加内容:
backendweb1 {
.host = "172.25.13.2";
.port = "80";
} ##172.25.13.2主机作为后台服务器1
backendweb2 {
.host = "172.25.13.3";
.port = "80";
} ##172.25.13.3主机作为后台服务器2
subvcl_recv { ##varnish入口函数
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";}
}
:wq
##如果访问域名www.westos.org,varnish将访问后端服务器web1;如果访问域名bbs.westos.org,varnish将访问后端服务器web2;访问其他,将会报错
##后端服务器须有发布文件--Apache首页
![](https://img-blog.csdn.net/20170818192803959?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2./etc/init.d/varnish reload
<2>测试:
浏览器分别访问域名www.westos.org、bs.westos.org或其他
bc1c
curl -I 域名
curl 域名
![](https://img-blog.csdn.net/20170818192808948?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170818192815551?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170818192821004?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
五、负载均衡
同一域名的后端服务器多与一台,当其中某台服务器down掉时,保证用户仍可以继续访问该域名。当多台后台服务器均down掉时将会报错,一般情况下后台服务器不会全部down掉。
<1>varnish端操作
1.vim /etc/varnish/default.vcl
添加内容如下:
directorlb round-robin {
{ .backend = web1;}
{ .backend = web2;}
}
##把多个后端聚合为一个组,作负载均衡;round-robin:均衡器
##定义均衡器lb
编辑内容:
subvcl_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将访问后端服务器lb--聚合多个后端;
##如果访问域名bbs.westos.org,varnish将访问后端服务器web2;
##访问其他,将会报错
2./etc/init.d/varnish reload ##重刷
![](https://img-blog.csdn.net/20170818192827451?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
<2>上述步骤给域名www.westos.org新增后台服务器web2--172.25.13.3,web2又是域名bbs.westos.org的后台服务器,所以在web2端--172.25.13.3添加Apache虚拟用户以示访问不同域名时的区别
1.vim /etc/httpd/conf/httpd.conf
修改内容:
990NameVirtualHost *:80 ##开启虚拟域
添加内容:
<VirtualHost*:80>
DocumentRoot /var/www/html
ServerName server3
</VirtualHost>
<VirtualHost*:80>
DocumentRoot /www/bbs
ServerName bbs.westos.org
</VirtualHost>
<VirtualHost*:80>
DocumentRoot /www/westos
ServerName www.westos.org
</VirtualHost>
:wq
2.mkdir /www/westos -p
mkdir /www/bbs -p ##第归创建虚拟用户根目录
3.编辑虚拟用户发布文件
vim /www/westos/index.html
vim /www/bbs/index.html
4.vim /etc/httpd/conf/httpd.con ##编辑主配置文件
![](https://img-blog.csdn.net/20170818192834713?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4./etc/init.d/httpd restart ##重启服务
<3>测试
浏览器访问www.westos.org并刷新页面
使用命令curl www.westos.org,为方便观测使用for语句:
for i in {1..10};do curl www.westos.org;done
##执行curl命令10次
![](https://img-blog.csdn.net/20170818192839937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170818192845909?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
六、CDN推送
CDN推送:varnish有一定的缓存时间,当后台服务器有更新时,varnish端并不能及时同步更新,此时就可以使用推送器将后台服务器的更新信息及时推送给varnish端。
为方便实验,可以选择在装有varnish的主机安装以下服务,注意监听端口的设置。
<1>server1端安装阿帕奇
1.yum install httpd -y ##安装apache服务
2.vim /etc/httpd/conf/httpd.conf
修改内容:将监听端口改为8080,Apache默认监听80端口,会与varnish冲突(二.<1>中的配置过程)
136Listen 8080
:wq
3./etc/init.d/httpd start
<2>server1端安装推送器
1.unzip bansys.zip -d /var/www/html
##解压至Apache发布目录
2.mv /var/www/html/bansys/* /var/www/html/
3.vim /var/www/html/config.php
保留如下内容,其余信息注释掉:
<?php
//varnish主机列表,可以有多个
$var_group1 = array(
'host'=> array('172.25.13.1'),
'port'=> '80',
);
//对主机列表进行绑定,指定某域维护的主机,
$VAR_CLUSTER = array(
'www.westos.org' =>$var_group1, #映射至主集列表
);
//varnish版本
//2.x和3.x推送命令不一样,本主机使用的是3.0版本的varnish
$VAR_VERSION= "3";
?>
![](https://img-blog.csdn.net/20170818192851912?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
<3>推送器需要php支持,见上文的推送器配置文件config.php
yum install php -y
<4>varnish端--server1设置访问控制
1.vim /etc/vanish/default.vcl
添加内容:
acl westos {
"127.0.0.1";
"172.25.0.0"/24;
}
##设置可以清缓存的用户(连接80端口)
接入函数添加内容:
sub vcl_recv {
if (req.request == "BAN") {
if(!client.ip ~ westos) {
error 405 "Not allowed";}
ban("req.url ~" + req.url);
error 200 "ban added";
注释掉负载均衡函数中的return (pass);
}
##若是缓存推送请求,通过url哈希算法来判断推送用户的ip是否被允许(aci westos函数)
2./etc/init.d/varnish reload
![](https://img-blog.csdn.net/20170818192858867?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
<4>测试端测试
1.浏览器访问172.25.13.1--推送器端,页面显示如下:
![](https://img-blog.csdn.net/20170818192904120?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.浏览器访问域名,或使用curl命令:访问www.westos.org时,会清空/下所有缓存;访问www.westos.org/index.html时,将只清空index.html缓存。
![](https://img-blog.csdn.net/20170818192909980?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.后台服务器更新:vim /var/www/html/index.html ##修改Apache首页内容
![](https://img-blog.csdn.net/20170818192916181?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4.CDN推送
选择HTPP推送,推送内容/index.html,此处的/ 表示Apache的根--发布目录
![](https://img-blog.csdn.net/20170818192929770?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVfc3Vpc19MdWx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5.再访问域名,查看是否更新
一、CDN:内容分发网络,可加速网站访问
接入层(CDN):代理层,支持Haproxy。其中反向代理有:varnish、squid
二、varnish工作原理
<1>在server1端安装varnish主程与库文件,并进行配置
1.yum insatll varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
2.vim /etc/sysconfig/varnish ##全局配置文件
编辑内容如下:
66 VARNISH_LISTEN_PORT=80 ##将监听端口改为80,方便检测
解释部分语句:
70 VARNISH_ADMIN_LISTEN_PORT=6082 ##管理员端口
76 VARNISH_MIN_THREADS=50 ##最小线程数
79 VARNISH_MAX_THREADS=1000 ##最大线程数
82 VARNISH_THREAD_TIMEOUT=120 ##单线程timeout为120s
89 VARNISH_STORAGE_SIZE=1G ##可存数据大小
95 VARNISH_TTL=120 ##缓存过期时间为120s
3.vim /etc/varnish/default.vcl
添加内容:
7 backend default {
8 .host ="172.25.13.2"; ##后端服务器为172.25.13.2
9 .port = "80";
4. /etcinit.d/varnish start ##开启服务
<2>server2与server3端安装httpd,并开启服务
1.yum install httpd -y
2./etc/init.d/httpd start
3.vim /var/www/html/index.html ##编辑apache默认发布文件
<h1>server2</h1>
:wq
server3端同上
<3>测试
浏览器中访问172.25.13.1,测试结果显示如下:
<4>查看缓存命中情况
1.vim /etc/varnish/default.vcl
添加内容如下:
subvcl_deliver {
if(obj.hits > 0) {
set resp.http.X-Cache = "HIT fromwestos cache";
} ##如果缓存命中将显示"HIT from westos cache"
else{
set resp.http.X-Cache = "MISS fromwestos cache";
} ##若为命中缓存将显示"MISS from westos cache"
return(deliver);
}
2./etc/init.d/varnish reload ##重新加载--不用断开连接,直接刷新
3.测试
为方便后续实验,在测试端添加解析:
第一此访问,无缓存记录即未命中缓存,显示"MISS from westos cache"
再次访问时命中缓存,显示"HITfrom westos cache"
三、varnish缓存的清除
varnishadm ban.url .*$ #清除所有
varnishadm ban.url /index.html #清除 index.html 页面缓存
varnishadm ban.url /目录名/$ ##清除目录缓存,可通过Apache访问的目录
清除缓存后再访问时,varnish将访问后端服务器。可以通过Age显示来判断
四、定义多个不同域名站点的后端服务器
<1>varnish端操作
1.vim /etc/varnish/default.vcl
添加内容:
backendweb1 {
.host = "172.25.13.2";
.port = "80";
} ##172.25.13.2主机作为后台服务器1
backendweb2 {
.host = "172.25.13.3";
.port = "80";
} ##172.25.13.3主机作为后台服务器2
subvcl_recv { ##varnish入口函数
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";}
}
:wq
##如果访问域名www.westos.org,varnish将访问后端服务器web1;如果访问域名bbs.westos.org,varnish将访问后端服务器web2;访问其他,将会报错
##后端服务器须有发布文件--Apache首页
2./etc/init.d/varnish reload
<2>测试:
浏览器分别访问域名www.westos.org、bs.westos.org或其他
bc1c
curl -I 域名
curl 域名
五、负载均衡
同一域名的后端服务器多与一台,当其中某台服务器down掉时,保证用户仍可以继续访问该域名。当多台后台服务器均down掉时将会报错,一般情况下后台服务器不会全部down掉。
<1>varnish端操作
1.vim /etc/varnish/default.vcl
添加内容如下:
directorlb round-robin {
{ .backend = web1;}
{ .backend = web2;}
}
##把多个后端聚合为一个组,作负载均衡;round-robin:均衡器
##定义均衡器lb
编辑内容:
subvcl_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将访问后端服务器lb--聚合多个后端;
##如果访问域名bbs.westos.org,varnish将访问后端服务器web2;
##访问其他,将会报错
2./etc/init.d/varnish reload ##重刷
<2>上述步骤给域名www.westos.org新增后台服务器web2--172.25.13.3,web2又是域名bbs.westos.org的后台服务器,所以在web2端--172.25.13.3添加Apache虚拟用户以示访问不同域名时的区别
1.vim /etc/httpd/conf/httpd.conf
修改内容:
990NameVirtualHost *:80 ##开启虚拟域
添加内容:
<VirtualHost*:80>
DocumentRoot /var/www/html
ServerName server3
</VirtualHost>
<VirtualHost*:80>
DocumentRoot /www/bbs
ServerName bbs.westos.org
</VirtualHost>
<VirtualHost*:80>
DocumentRoot /www/westos
ServerName www.westos.org
</VirtualHost>
:wq
2.mkdir /www/westos -p
mkdir /www/bbs -p ##第归创建虚拟用户根目录
3.编辑虚拟用户发布文件
vim /www/westos/index.html
vim /www/bbs/index.html
4.vim /etc/httpd/conf/httpd.con ##编辑主配置文件
4./etc/init.d/httpd restart ##重启服务
<3>测试
浏览器访问www.westos.org并刷新页面
使用命令curl www.westos.org,为方便观测使用for语句:
for i in {1..10};do curl www.westos.org;done
##执行curl命令10次
六、CDN推送
CDN推送:varnish有一定的缓存时间,当后台服务器有更新时,varnish端并不能及时同步更新,此时就可以使用推送器将后台服务器的更新信息及时推送给varnish端。
为方便实验,可以选择在装有varnish的主机安装以下服务,注意监听端口的设置。
<1>server1端安装阿帕奇
1.yum install httpd -y ##安装apache服务
2.vim /etc/httpd/conf/httpd.conf
修改内容:将监听端口改为8080,Apache默认监听80端口,会与varnish冲突(二.<1>中的配置过程)
136Listen 8080
:wq
3./etc/init.d/httpd start
<2>server1端安装推送器
1.unzip bansys.zip -d /var/www/html
##解压至Apache发布目录
2.mv /var/www/html/bansys/* /var/www/html/
3.vim /var/www/html/config.php
保留如下内容,其余信息注释掉:
<?php
//varnish主机列表,可以有多个
$var_group1 = array(
'host'=> array('172.25.13.1'),
'port'=> '80',
);
//对主机列表进行绑定,指定某域维护的主机,
$VAR_CLUSTER = array(
'www.westos.org' =>$var_group1, #映射至主集列表
);
//varnish版本
//2.x和3.x推送命令不一样,本主机使用的是3.0版本的varnish
$VAR_VERSION= "3";
?>
<3>推送器需要php支持,见上文的推送器配置文件config.php
yum install php -y
<4>varnish端--server1设置访问控制
1.vim /etc/vanish/default.vcl
添加内容:
acl westos {
"127.0.0.1";
"172.25.0.0"/24;
}
##设置可以清缓存的用户(连接80端口)
接入函数添加内容:
sub vcl_recv {
if (req.request == "BAN") {
if(!client.ip ~ westos) {
error 405 "Not allowed";}
ban("req.url ~" + req.url);
error 200 "ban added";
注释掉负载均衡函数中的return (pass);
}
##若是缓存推送请求,通过url哈希算法来判断推送用户的ip是否被允许(aci westos函数)
2./etc/init.d/varnish reload
<4>测试端测试
1.浏览器访问172.25.13.1--推送器端,页面显示如下:
2.浏览器访问域名,或使用curl命令:访问www.westos.org时,会清空/下所有缓存;访问www.westos.org/index.html时,将只清空index.html缓存。
3.后台服务器更新:vim /var/www/html/index.html ##修改Apache首页内容
4.CDN推送
选择HTPP推送,推送内容/index.html,此处的/ 表示Apache的根--发布目录
5.再访问域名,查看是否更新
相关文章推荐
- linux学习 CDN加速
- web网站加速之CDN(Content Delivery Network)技术原理学习
- cdn加速系统---基于linux
- DirectFB学习之移植到nuc972平台 标签: DirectFBlinux图形加速驱动【转】
- Linux入门教程:CDN加速
- Linux运维学习笔记之十六:LAMP与LNMP加速与缓存优化进阶实战
- Linux 学习碎片
- Linux学习第十七篇--设置开机挂载和建立swap
- 【嵌入式方向指南】作为一个新人,怎样学习嵌入式Linux?
- Linux学习笔记(PATH,cp,mv,文档查看cat/more/less/head/tail)
- linux网络设备驱动学习
- 2011-寒假 linux 学习笔记
- linux学习
- DayDayUP_Linux运维学习_Jsp 相关环境的搭建
- linux学习路线
- 学习Linux的好网站
- Linux中用内核KHTTPD实现Web服务加速
- iOS学习新知识-加速计和陀螺仪
- Linux并行一些学习网站1
- Linux学习-shell脚本编程基础之处理用户输入