Varnish搭建网络加速器cdn

CDN简介:
CDN(Content Delivery Network)是指内容分发网络,也称为内容传送网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

Varnish简介:
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。

用varnish实现cdn:
在当前主流的Web架构中,Cache担任着越来越重要的作用。常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。

环境:
配置三台虚拟机,与物理机的私有ip处于同一网段,并搭建好yum源

server1172.25.60.1
server2172.25.60.2
server3172.25.60.3

网关:都设为物理机ip
firewalld:disable
selinux:disabled

此次实验中: server1为varnish代理服务器,server2,server3为http服务器

1.搭建Varnish服务器

server2:
(1)安装httpd

yum install httpd -y

(2)编辑默认发布文件,随便写点东西

vim /var/www/html/index.html

在这里插入图片描述
(3)开启httpd服务

systemctl start httpd

server1:
(1)获取安装包并安装

安装包:
jemalloc-3.6.0-1.el7.x86_64.rpm  
varnish-libs-4.0.5-1.el7.x86_64.rpm
varnish-4.0.5-1.el7.x86_64.rpm
安装:
yum install jemalloc-3.6.0-1.el7.x86_64.rpm varnish-*

在这里插入图片描述
(2)编辑 /etc/varnish/varnish.params 修改端口为80
在这里插入图片描述
(3)编辑 /etc/varnish/default.vcl 添加需要代理的服务器的信息(ip和端口号)
在这里插入图片描述
(4)开启varnish

systemctl start varnish

测试:
物理机访问server1,代理server1将访问它的转到了server2上,访问时可以看到我们刚才在server2的httpd的默认发布文件中编写的内容
在这里插入图片描述

2.查看缓存命中情况

server1:
(1)编辑 /etc/varnish/default.vcl
在这里插入图片描述
(2)重启varnish

systemctl restart varnish

测试: 物理机

curl -I 172.25.60.1

在这里插入图片描述

3.清空缓存

默认缓存时间为120秒,可以通过 varnishadm 命令手动清除缓存

varnishadm ban.url "~" / 	//清除所有
varnishadm ban.url "~" /index.html	//清除index.html页面缓存

4.定义多个不同域名站点的后端服务器

server3:
(1)安装httpd

yum install httpd -y

(2)编辑默认发布文件,随便写点东西

vim /var/www/html/index.html

在这里插入图片描述
(3)开启httpd服务

systemctl start httpd

server1:
(1)编辑 /etc/varnish/default.vcl

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)重启varnish

systemctl restart varnish

测试:
(1)编辑本地解析文件 /etc/hosts
在这里插入图片描述
(2)访问:www.westos.orgbbs.westos.org
根据本地解析,都解析到了172.25.60.1(server1),它通过varnish的配置文件规则访问不同的服务器
在这里插入图片描述
注:
curl -I www.westos.orgcurl -I www.westos.org/index.html 是不同的
在这里插入图片描述

5.实现负载均衡(采用轮询)

server1:
(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和web2
	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();	
		#访问www.westos.org去轮询web1h和web2
		return(pass)
		#因为存在缓存,为了测试方便,不进行缓存。
	} 
	elsif (req.http.host ~ "^bbs.westos.org") {
		set req.backend_hint = web2;		
		#访问bbs.westos.org时去访问web2
	} 
	else {
		return (synth(405));
	}
}

在这里插入图片描述
(2)重启varnish

systemctl restart varnish

测试:
根据配置,访问 www.westos.org 时轮询访问两个站点web1和web2,访问 bbs.westos.org 时访问web2
在这里插入图片描述
注: 做完实验记得将刚才设置的return(pass)注释或删除;在实际中我们是不需要这样做的。

6.虚拟主机 + Varnish:实现负载均衡

server3:
(1)建立两个发布目录,编辑发布文件

mkdir /www /bbs
vim /www/index.html	
	#写入:www
vim /bbs/index.html	
	#写入:bbs

(2)进入apache子配置目录 /etc/httpd/conf.d/ ,编辑子配置文件(*.conf)

cd /etc/httpd/conf.d/
ls
vim vhost.conf
<VirtualHost *:80>
        DocumentRoot    /www
        ServerName      www.westos.org
</VirtualHost>
<Directory "/www">
        Require all granted
</Directory>

<VirtualHost *:80>
        DocumentRoot    /bbs
        ServerName      bbs.westos.org
</VirtualHost>
<Directory "/bbs">
        Require all granted
</Directory>

(3)重启apache服务

 systemctl restart httpd

注: 还是轮询测试,将配置文件 /etc/varnish/default.vcl 中的return(pass)打开

测试: 物理机
在这里插入图片描述
访问www.westos.org,去轮询轮询server3中的/www/index.html和server2中的/var/www/html/index.html
访问bbs.westos.org,去访问server3中的/var/www/html/index.html

7.推送平台----图像化管理(清理)缓存

server1:
(1)获取推送平台的压缩包
在这里插入图片描述
(2)安装推送平台所需的软件(因为我的虚拟机是最小化安装,所以还需要unzip解压工具)

yum install httpd php unzip -y

(3)将推送平台解压到 /var/www/html/ ,并将解压的文件放到这个目录下

unzip bansys.zip -d /var/www/html/	#-d指定解压路径
cd /var/www/html/
ls
mv bansys/* .	#把解压的内容移到上以及目录/var/www/html

(4)配置 config.php 文件

<?php
 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.60.1'),
                                                'port' => '8080',                        
                    );
 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.westos.crg' => $var_group1,		#
                     );
?>

(5)此时推送平台就做好了,但为了安全,还应设置权限。编辑 /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);
}

(6)在物理机的浏览器中打开推送平台
在这里插入图片描述
测试:

推送指定的网页/index.html
推送所有的.*

以所有的为例:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值