varnish推送平台的搭建
varnish推送平台的搭建
Varnish在企业中就是做缓存和反向代理
清varnish缓存的两种方法
手动法清缓存
一条命令清缓存
[root@server1 ~]# varnishadm ban req.url "~" /index.html
[root@server1 ~]# varnishadm ban req.url "~" /
这里可参考我写的《Varnish的CDN加速功能实现》这篇文章
新版varnish自带界面输入命令清缓存(使用界面清缓存)
[root@server1 ~]# varnishadm
200
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-514.el7.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit
varnish-6.3.1 revision 6e96ff048692235e64565211a38c41432a26c055
Type 'help' for command list.
Type 'quit' to close CLI session.
ban req.url ~ "index.html"
200 #200表示清理成功
exit
101
Unknown request.
Type 'help' for more info.
^D[root@server1 ~]#
#按Ctrl + D退出
上面的非运维人员不好用
使用php前端页面推送平台清缓存
为了给非运维人员使用我们使用一个php写的平台
先获取php推送平台大压缩包
[root@server1 ~]# scp root@172.25.21.250:/home/kiosk/Desktop/varnish相关软件安装包/bansys.zip .
root@172.25.21.250's password:
bansys.zip 100% 126KB 125.6KB/s 00:00
[root@server1 ~]# ls
bansys.zip varnish-6.3.1-1.el7.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
因为系统没有unzip的命令(我们需要unzip命令来解压bansys.zip)
所以我们得下载unzip,
第二由于推送平台是php写的所以我们要安装php来时使用它
我们要将CDN推送平台发布到apache默认目录下,在网页里操作需要安装httpd服务
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls
bansys class_socket.php config.php index.php purge_action.php static
更改config.php这个配置文件文件,配置php推送平台里的参数
改完如下:
[root@server1 html]# vim config.php
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.21.1'),
#这里定义的varnish的服务端
'port' => '8080',
#端口为改为8080
);
#由于我们没有用到数据库,所以我们将mysql这个模块给删掉
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
#清理缓存是用域名清理的我们这里改为我们自己的www.westos.org,因为我们没有那么多组,就改为$var_group1
#因为我们只用一个域名来做实验,底下多出的域名样式删掉
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3"; #我们使用的varnish已经到6了,所以选新的版本3
?>
启动varnish服务器server1上的httpd服务
[root@server1 html]# systemctl start httpd
在浏览器中搜索172.25.21.1:8080
我们这里使用的apache所以选择http
然后在改主配置文件:
[root@server1 html]# vim /etc/varnish/default.vcl
#在sub vcl_recv这个板块上面添加如下
acl westos {
"127.0.0.1"; #本地可以推送
"172.25.21.0"/24; #写我们实验的网段
}
sub vcl_recv { #将之前做的注释掉,防止影响实验结果
if (req.method == "BAN") {
#如果请求方式为BAN(清理缓存中满足表达式的条件对象)等效我们用命令行手动清缓存
if (!client.ip ~ westos) {
#如果IP不是我们前面acl westos中定义的IP,就不允许清除
return(synth(405,"Not allowed"));
}
ban("req.url ~ " + req.url); #如果是的话就取出相应的缓存对象内容进行更新(清除)
return(purge);
}
}
重启varnish服务
[root@server1 html]# systemctl restart varnish
然后配置真机的解析:
[root@foundation21 kiosk]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.21.1 www.westos.org
#第一行第二行可以不删
.* 表示推送(清除)所有页面
/index.html 表示清除单个页面缓存
推送就是清除单个页面的意思
把我们放在CDN里的东西更新,varnish,第一次请求它没有东西从服务器里取一个东西
放在里面(里面本身没有数据)
测试
[root@foundation21 kiosk]# curl -I www.westos.org
HTTP/1.1 200 OK
……
X-Cahce: HIT from westos-huige.cache
Accept-Ranges: bytes
Connection: keep-alive