Varnish
定义
是一款高性能、开源的反向代理服务器和缓存服务器
Varnish使用内存缓存文件来减少响应时间和网络带宽消耗(反向代理:隐藏真实服务器信息, 正向代理:隐藏真实客户端信息)
Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存
Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件
所以Varnish要相对更高效,但也有缺点,内存中的缓存在服务器重启后会丢失
CDN
技术
CDN的全称是Content Delivery Network,即内容分发网络
CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就
近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率
CDN的关键技术主要有内容存储和分发技术
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中
在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求
搭建环境
server1、 server2、server3 同时修改以下配置
systemctl stop firewalld
setenforce 0
vim /etc/hosts
192.168.1.1 server1
192.168.1.2 server2
192.168.1.3 server3
server1
yum install -y varnish-*.rpm varnish-libs-*.rpm jemalloc-*.rpm
安装 varnish
rpm -qc varnish
/etc/varnish/default.vcl
/etc/varnish/varnish.params
vim /etc/varnish/varnish.params
VARNISH_LISTEN_PORT=80
vim /etc/varnish/default.vcl
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";
backend web1{
.host = '192.168.1.2'
.port = '80';
}
backend web2{
.host = '192.168.1.3'
.port = '80';
}
sub vcl_deliver {
if(obj.hits > 0) {
set.resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
sub vcl_init {
new lb = directors.round_robin();
lb.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();
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
} else { return (synth(405));
}
systemctl restart varnish
server2
yum install http -y
vim /var/www/html/index.html
server2.example.com
server3
yum install http -y
vim /var/www/html/index.html
server3.example.com
测试
测试主机
vim /etc/hosts
192.168.1.1 www.westos.org bbs.westos.org
curl www.westos.org
访问 www.westos.org 可以看到 server2 与 server3 轮流响应请求
curl bbs.westos.org
访问 bbs.westos.org 只能看到 server3 响应请求