Varnish搭建CDN

一、Varnish简介


1、Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。
2、varnish项目是2006年发布的第一个版本0.9.距今已经有十多年了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。

二、Varnish安装


1、yum进行安装

本机操作系统:redhat6.5
网盘下载链接:https://pan.baidu.com/s/1AaxNGWDGE-axZNuqi1p_zQ 密码: kwcu

 yum install -y varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm

2、配置limits.conf

虚拟机IP:10.10.10.1(服务器)

[root@server1 mnt]# ulimit -n                         ###ulimit用来限制系统用户对shell资源的访问,-n:文件打开的数量
1024 

[root@server1 mnt]# sysctl -a |grep file           
fs.file-nr = 448    0   98865
fs.file-max = 98865

vim /etc/security/limits.conf                        ###nofile打开的最多的文件数量,noproc最大进程数
varnish         -       nofile          65535

三、CDN缓存测试


1、配置varnish

 vim /etc/sysconfig/varnish                 ###改变端口为80
 # VARNISH_LISTEN_ADDRESS=
 VARNISH_LISTEN_PORT=80

2、配置default.vcl

 vim /etc/varnish/default.vcl
 backend web1 {
   .host = "10.10.10.2";
   .port = "80";
 }

 sub vcl_deliver {
 if (obj.hits > 0) {
          set resp.http.X-Cache = "HIT cache";
 }
 else {
         set resp.http.X-Cache = "MISS cache";
 }
 return(deliver);
 }

3、测试

(1)server2:10.10.10.2中搭建httpd服务
 echo server2 >/var/www/html/index.html
(2)真机中测试
 curl -I 10.10.10.1
(3)第一次结果:

这里写图片描述

(4)第二次结果:

这里写图片描述

不难可以看出,当client访问服务器时,当第一次时由于没有缓存,所以访问server2(10.10.10.2),当二次访问时,直接访问的时server1(10.10.10.1)cache。

(5)可以在服务器手动清除缓存
 varnishadm ban.url .*$                         ###清除所有
 varnishadm ban.url /index.html                 ###清除index.html页面缓存
 varnishadm ban.url /dream/$                    ###清除dream目录缓存

四、负载均衡


1、配置default.vcl

虚拟机IP:10.10.10.1(服务器)

 vim /etc/varnish/default.vcl
 backend web1 {
   .host = "10.10.10.2";
   .port = "80";
 }

 backend web2 {
   .host = "10.10.10.3";
   .port = "80";
 }
 director lb round-robin {                                          ###轮询
         { .backend = web1; }
         { .backend = web2; }
 }

 sub vcl_recv {
 if (req.http.host ~ "^(www.)?dream.com") {
         set req.http.host = "www.dream.com";
         set req.backend = lb;
         return (pass);                                              ###用于测试,不缓存
 } elsif (req.http.host ~ "^bbs.dream.com") {
         set req.backend = web2;
         return (pass);                               
 } else {
         error 404 "dream cache";
         }
 }

 /etc/init.d/varnish restart

2、配置httpd.conf

server3:10.10.10.3

 vim /etc/httpd/conf/httpd.conf
 990 NameVirtualHost *:80

 1003 <VirtualHost *:80>
 1004     DocumentRoot /www1
 1005     ServerName www.dream.com
 1006 </VirtualHost>
 1007 
 1008 <VirtualHost *:80>
 1009     DocumentRoot /www2
 1010     ServerName bbs.dream.com
 1011 </VirtualHost>

 mkdir /www1
 mkdir /www2
 echo www1.www.dream.com >/www1/index.html
 echo www2.bbs.dream.com >/www2/index.html
 /etc/init.d/httpd restart

3、测试:

(1)真机加入host解析

 vim /etc/hosts
 10.10.10.1      www.dream.com   bbs.dream.com

这里写图片描述

可以看出当我们访问www.dream.com时会发生轮询,而且可以访问bbs.dream.com形成域名匹配

五、varnish cdn 推送平台


1、安装推送平台

虚拟机IP:10.10.10.1(服务器)

 yum install -y php httpd
 unzip bansys.zip
 mv bansys/* /var/www/html

2、配置config.php

 vim /var/www/html/config.php
 <?php
 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('10.10.10.1'),
                                                'port' => '80',                  
                    );

 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.dream.com' => $var_group1,
                                             'bbs.dream.com' => $var_group1,
                     );

 //varnish版本
 //2.x和3.x推送命令不一样
 $VAR_VERSION = "3";

 ?>

3、配置httpd.conf

 vim /etc/httpd/conf/httpd.conf
 #Listen 12.34.56.78:80
 Listen 8080

 vim /etc/varnish/default.vcl
 acl dream {
         "127.0.0.1";
         "10.10.10.0"/24;
 }

 backend web1 {
   .host = "10.10.10.2";
   .port = "80";
 }

 backend web2 {
   .host = "10.10.10.3";
   .port = "80";
 }

 director lb round-robin {
         { .backend = web1; }
         { .backend = web2; }
 }

 sub vcl_recv {

 if (req.request == "BAN") {
         if (!client.ip ~ dream) {
                 error 405 "Not allowed.";
         }
         ban("req.url ~ " + req.url);
         error 200 "ban added";
 }

 if (req.http.host ~ "^(www.)?dream.com") {
         set req.http.host = "www.dream.com";
         set req.backend = lb;
 } elsif (req.http.host ~ "^bbs.dream.com") {
         set req.backend = web2;
 } else {
         error 404 "dream cache";
         }
 }
 sub vcl_deliver {
 if (obj.hits > 0) {
         set resp.http.X-Cache = "HIT cache";
 }
 else {
         set resp.http.X-Cache = "MISS cache";
 }
         return(deliver);
 }

 /etc/init.d/varnish restart
 /etc/init.d/httpd restart

4、测试

(1)浏览器登陆界面
 http://10.10.10.1:8080
(2)界面操作

选择为http,在里面输入/index.html清除此页面缓存,/dream/:清除目录下缓存,.清除所有缓存

这里写图片描述

搭建一个小型CDN实验环境可以帮助您理解CDN的工作原理和实际应用。下面是一个简单的步骤: 1. 选择合适的服务器:您需要至少两台服务器来搭建CDN实验环境。一台作为源服务器,提供原始内容,另一台或多台作为缓存服务器,分布在不同的地理位置。 2. 安装Web服务器:在源服务器上安装和配置一个常见的Web服务器,如Nginx或Apache。将您想要通过CDN分发的静态内容放在该服务器上。 3. 配置缓存服务器:在缓存服务器上安装和配置一个反向代理服务器,如Nginx或Varnish。通过配置反向代理,使其将请求转发到源服务器,并将响应缓存起来。 4. 配置DNS:将域名解析指向您的CDN实验环境中的缓存服务器。您可以使用自己的域名或者在测试阶段使用临时域名。 5. 测试CDN效果:通过浏览器或命令行工具发送请求,观察内容是否从缓存服务器返回。您可以使用工具如curl或者在浏览器中查看网络请求的响应头。 6. 加入更多缓存服务器:如果您希望模拟更真实的CDN环境,可以添加更多的缓存服务器,并将其分布在不同的地理位置。确保这些缓存服务器配置正确并能够从源服务器获取内容。 7. 测试负载均衡:尝试同时发送大量请求到CDN环境,并观察请求是否被均匀地分发到不同的缓存服务器上。 请注意,这只是一个简单的CDN实验环境示例,实际的CDN系统可能更复杂,并涉及更多的组件和配置。此外,安全性、缓存策略、内容刷新等方面也需要根据实际需求进行配置和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wielun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值