高级(二)CDN之二

###强调:如果想弄懂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服务器

Apach配置虚拟主机的其它方式

##########

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
# 说明:根据结果判断平台是否完成推送和更新!

达到的效果清除记录在缓存中的东西,客户端访问浏览器时,会直接在后端服务器获取,这样就能完成实时更新

Linux运维跳槽必备的40道面试精华题

如何在 Linux/Unix/Mac 下清除 DNS 查询缓存

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值