本文主要是介绍cdn加速之varnish,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实验环境:
一个客户端,一个反向代理,多个后端服务器
代理服务器关掉防火墙,selinux设置为disabled,让它们处于同一个网段,方便测试
代理:cdn加速,反向代理,负载均衡
客户端:测试
后端服务器:提供服务
正向代理:客户端知道服务器端,但是必须通过一个代理服务器
反向代理:客户端不知道服务器端,知道代理服务器端,访问代理服务器端,由代理服务器转发请求,转发回应消息。
varnish工作原理图
实验步骤:
1、下载并安装varnish
2、修改配置文件
1)、/etc/varnish/varnish.params :修改端口为80
2)、 /etc/varnish/default.vcl :添加代理服务器的信息
backend default {.host = "代理的ip地址".port = "80"
}
2、配置缓存命中
1)、/etc/varnish/default.vcl
2)、测试
curl -I 代理服务器ip地址
3、清空缓存
1)、命令清空缓存:
varnishadm ban.url "~" / //清除所有
varnishadm ban.url "~" /index.html //清除index.html页面缓存
2)、界面清空缓存:
获取压缩包bansys.zip
配置:
yum install httpd php unzip -yunzip bansys.zip -d /var/www/html/ #-d指定解压路径
cd /var/www/html/
ls
mv bansys/* ../ #把解压的内容移到上以及目录/var/www/html
配置 /var/www/html/config.php 文件:
<?php
//varnish主机列表//可定义多个主机列表$var_group1 = array('host' => array('172.25.60.1'),'port' => '8080', );//varnish群组定义//对主机列表进行绑定$VAR_CLUSTER = array('www.westos.com' => $var_group1,);
?>
/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); #清理缓存
}
4、反向代理
1)、vim /etc/varnish/default.vcl
#配置两个web服务器
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)、客户端解析测试
根据本地解析,都解析到了172.25.1.101(server1),它通过varnish的配置文件规则访问不同的服务器
5、负载均衡
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和web2lb.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和web2return(pass)#因为存在缓存,为了测试方便,不进行缓存。} elsif (req.http.host ~ "^bbs.westos.org") {set req.backend_hint = web2; #访问bbs.westos.org时去访问web2} else {return (synth(405));}
}
2)、测试
这篇关于cdn加速之varnish的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!