###强调:如果想弄懂acl的配置语言,可以看一些perl相关的书籍###
接上
一、虚拟主机
掌握:虚拟主机的概念、虚拟主机的作用、虚拟主机的配置
虚拟主机:并非指不存在,而是指空间是由实体的服务器延伸而来,虚拟主机之间完全独立,并可由用户自行管理,其硬件系统可以是基于服务器群,或者单个服务器!
角度:对服务器的后端人员来说是逻辑上的物理主机(虚拟主机),但是对客户端来说就是“真实”的物理服务器!
作用:同一个IP对应不同的域名,不同的域名对应不同的功能模块!
举例:QQ的几大板块,就是同一的IP!
#########
httpd虚拟主机的配置
<VirtualHost *:80>
DocumentRoot /music
ServerName music1.wzj.com
</VirtualHost>
<Directory "/music">
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /video
ServerName video1.wzj.com
</VirtualHost>
<Directory "/video">
Require all granted
</Directory>
建立相应的资源
vim /etc/httpd/conf.d/vhost.conf
mkdir /music
mkdir /video
vim /music/index.html
vim /video/index.html
systemctl start httpd
注意:一定是在/etc/httpd/conf.d/目录,而不是/etc/httpd/conf/目录(主配置文件)
说明:后端服务器这里使用的是apach的httpd服务器!
##########
DNS的核心配置
原因:varnish主机需要配置两个不同的域名,而转发请求的两个不同的域名对应不同的后端服务器!
说明:关于DNS的参考我这篇文章
varnish的配置
vcl 4.0;
# 这个模块是轮询的,这里不需要!
# import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";
# Default backend definition. Set this to point to your content server.
# 测试的后端服务器
backend default {
.host = "172.25.2.201";
.port = "80";
}
sub vcl_recv {
# 说明:接受客户端的url请求,进行相应的处理,然后进行请求转发
# 说明:从语法的角度-->这里属于perl的正则匹配
# 体现:varnish在安装的过程中,会安装许多perl的模块!
# vcl配置语言参考了C和perl!
if (req.http.host ~"^(music.)?wzj.com"){
# (1)后端服务器的music板块
set req.http.host = "music1.wzj.com";
}elsif (req.http.host ~"^(video.)?wzj.com") {
# (2)后端服务器的video板块
set req.http.host = "video1.wzj.com";
}else {
# (3)都不匹配,认为请求的资源主机不存在!
# 405表示请求的方式不对,常见请求的方式有get、post、head、put!
# 404表示服务器响应了,但是服务器没有此资源,客户端的请求错误!
# 503表示服务器不存在,或者存在但没有开启服务!
return (synth(503));
}
}
实验结果
理解:一个域名只能对应一个ip,但一个ip可以对应多个域名!
注意:虚拟主机的配置和前面的配置多个后端服务器的区别
虚拟主机本质:将varnish服务器映射到同一后端服务器的不同IP,访问的其实还是同一台后端服务器(物理服务器)!
配置不同的后端服务器:将varnish服务器的的IP映射不同的域名,进而varnish根据访问的域名不同来访问不同的后端服务器!
二、CDN推送平台的搭建
清除缓存的原因:
因为CDN节点做了缓存,在折叠源站点更新数据,但是由于该CDN节点的缓存服务器中该缓存仍在有效期,导致CDN的缓存数据与源站数据无法完全同步,所以在实际业务中,经常会遇到清除CDN中指定文件缓存的功能!
核心:数据同步!
1)命令手动推送
varnishadm ban req.url "~" / #清除缓存中所有的数据
varnishadm ban req.url "~" /index.html #清除缓存中的此页面数据
测试
curl -I ip -->看清除缓存后,从哪里拿数据!
可以使用正则表达式快速、批量地清除部分缓存
2)GUI推送
原因:我们在实现CDN高速缓存时通过命令等对CDN的管理有些麻烦,我们就可以使用CDN推送的方法同步后端服务内容!
管理推送的php模块下载 -->由于是通过Google目前被禁止,可能下载不了!
## 说明:以下步骤都是在测试服务器中进行的!
1.下载banzip,然后解压,并安装到/var/www/html目录下
说明:文件要直接暴露在/var/www/html目录中
2.安装php插件-->因为需要解析Php文件,界面需要php的支持!
3.安装 httpd,并修改默认端口为8080并重启httpd,因为我们的varnish在上一个实验已经占用了80端口
修改端口的原因:一个端口只能绑定一个服务或者说一个IP,否则端口被占用,会报错(服务无法启动)!
修改主配置文件的Listen(80-->8080)
4.编辑config.php进行配置
## 测试:可以分别用黑白名单服务器进行测试
5.http访问server1的8080端口,出现cdn推送界面
bansys工作模式
bansys 有两种工作模式,分别是:telnet 和 http 模式。
#telnet模式需要关闭varnish服务管理端口的验证,注释掉/etc/sysconfig/varnish文件中的
“-S ${VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
http模式需要对 varnish 做以下设置
varnish的配置文件
backend default {
.host = "172.25.2.201";
.port = "80";
}
# 设置访问控制(白名单),允许本机和172.25.2的网段推送
acl wzj {
# (1)本机
"127.0.0.1";
# (2)网段
"172.25.2.0"/24;
}
sub vcl_recv {
if (req.method == "BAN"){
# 如果采用推送方式是BAN
if (!client.ip ~ wzj) {
# 如果客户端的IP不在wzj控制模块中,则不允许推送,并告知原因!
return(synth(405,"Purgine not allowed for " + client.ip));
}
# 匹配的话,就像命令行清除缓存一样来执行!
ban("req.url ~" + req.url);
return(purge);
}
}
结果展示
注意:选择HTTP推送方式
测试步骤
(1)curl 172.25.2.200 -I
# 说明:第一次从后台拿数据-->提示信息
(2)curl 172.25.2.200 -I
# 说明:第二次从缓存中拿数据-->提示信息
(3)平台推送
(4)改变首页的内容,并重启服务
(4)curl 172.25.2.200 -I
# 说明:根据结果判断平台是否完成推送和更新!
达到的效果:清除记录在缓存中的东西,客户端访问浏览器时,会直接在后端服务器获取,这样就能完成实时更新。