您的位置:首页 > 运维架构 > Linux

Linux学习 CDN加速

2017-08-18 19:35 323 查看
CDN加速--varnish
一、CDN:内容分发网络,可加速网站访问

  接入层(CDN):代理层,支持Haproxy。其中反向代理有:varnish、squid

二、varnish工作原理

<1>在server1端安装varnish主程与库文件,并进行配置

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

2.vim /etc/sysconfig/varnish              ##全局配置文件

编辑内容如下:

66 VARNISH_LISTEN_PORT=80       ##将监听端口改为80,方便检测     



解释部分语句:

70 VARNISH_ADMIN_LISTEN_PORT=6082    ##管理员端口

76 VARNISH_MIN_THREADS=50            ##最小线程数

79 VARNISH_MAX_THREADS=1000              ##最大线程数

82 VARNISH_THREAD_TIMEOUT=120          ##单线程timeout为120s

89 VARNISH_STORAGE_SIZE=1G          ##可存数据大小

95 VARNISH_TTL=120        ##缓存过期时间为120s

3.vim /etc/varnish/default.vcl

添加内容:

  7 backend default {

 8   .host ="172.25.13.2";            ##后端服务器为172.25.13.2

 9   .port = "80";

4. /etcinit.d/varnish  start     ##开启服务

<2>server2与server3端安装httpd,并开启服务

1.yum install  httpd  -y

2./etc/init.d/httpd  start

3.vim /var/www/html/index.html       ##编辑apache默认发布文件

       <h1>server2</h1>

       :wq

 server3端同上

<3>测试

浏览器中访问172.25.13.1,测试结果显示如下:



<4>查看缓存命中情况

1.vim /etc/varnish/default.vcl

添加内容如下:

       subvcl_deliver {

       if(obj.hits > 0) {

              set resp.http.X-Cache = "HIT fromwestos cache";

       }     ##如果缓存命中将显示"HIT from westos cache"

       else{

              set resp.http.X-Cache = "MISS fromwestos cache";

       }     ##若为命中缓存将显示"MISS from westos cache"

       return(deliver);

       }    



2./etc/init.d/varnish reload     ##重新加载--不用断开连接,直接刷新

3.测试

为方便后续实验,在测试端添加解析:



第一此访问,无缓存记录即未命中缓存,显示"MISS from westos cache"



再次访问时命中缓存,显示"HITfrom westos cache"





三、varnish缓存的清除

varnishadm   ban.url   .*$        #清除所有

varnishadm   ban.url  /index.html          #清除 index.html 页面缓存

varnishadm  ban.url   /目录名/$            ##清除目录缓存,可通过Apache访问的目录

清除缓存后再访问时,varnish将访问后端服务器。可以通过Age显示来判断



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

<1>varnish端操作

1.vim /etc/varnish/default.vcl

添加内容:

       backendweb1 {

              .host = "172.25.13.2";

              .port = "80";

              }     ##172.25.13.2主机作为后台服务器1

       backendweb2 {

              .host = "172.25.13.3";

              .port = "80";

              }     ##172.25.13.3主机作为后台服务器2

       subvcl_recv {        ##varnish入口函数

       if(req.http.host ~ "^(www.)?westos.org") {

              set req.http.host ="www.westos.org";

              set req.backend = web1;}

        elsif (req.http.host ~"^bbs.westos.org") {

              set req.backend = web2; }

        else {error 404 "westos cache";}

       }

       :wq

##如果访问域名www.westos.org,varnish将访问后端服务器web1;如果访问域名bbs.westos.org,varnish将访问后端服务器web2;访问其他,将会报错

##后端服务器须有发布文件--Apache首页



2./etc/init.d/varnish reload

<2>测试:

浏览器分别访问域名www.westos.org、bs.westos.org或其他
bc1c

curl -I  域名

curl 域名







五、负载均衡

   同一域名的后端服务器多与一台,当其中某台服务器down掉时,保证用户仍可以继续访问该域名。当多台后台服务器均down掉时将会报错,一般情况下后台服务器不会全部down掉。

<1>varnish端操作

1.vim /etc/varnish/default.vcl

添加内容如下:

       directorlb round-robin {

              { .backend = web1;}

              { .backend = web2;}

       }

       ##把多个后端聚合为一个组,作负载均衡;round-robin:均衡器

       ##定义均衡器lb

编辑内容:

       subvcl_recv {

       if(req.http.host ~ "^(www.)?westos.org") {

              set req.http.host ="www.westos.org";

              set req.backend = lb;

              return (pass);#为了测试方便,不进行缓存。

       }elsif (req.http.host ~ "^bbs.westos.org") {

              set req.backend = web2;

       }else {

              error 404 "westos cache";

       }

       }

       ##如果访问域名,varnish将访问后端服务器lb--聚合多个后端;

       ##如果访问域名bbs.westos.org,varnish将访问后端服务器web2;

       ##访问其他,将会报错

2./etc/init.d/varnish  reload  ##重刷



<2>上述步骤给域名www.westos.org新增后台服务器web2--172.25.13.3,web2又是域名bbs.westos.org的后台服务器,所以在web2端--172.25.13.3添加Apache虚拟用户以示访问不同域名时的区别

1.vim /etc/httpd/conf/httpd.conf

修改内容:

       990NameVirtualHost *:80    ##开启虚拟域

添加内容:

       <VirtualHost*:80>

           DocumentRoot /var/www/html

           ServerName server3     

       </VirtualHost>

       <VirtualHost*:80>

     DocumentRoot /www/bbs

     ServerName bbs.westos.org

       </VirtualHost>

       <VirtualHost*:80>

           DocumentRoot /www/westos

           ServerName www.westos.org

       </VirtualHost>

       :wq

2.mkdir /www/westos  -p

 mkdir  /www/bbs  -p      ##第归创建虚拟用户根目录

3.编辑虚拟用户发布文件

 vim  /www/westos/index.html

 vim  /www/bbs/index.html

4.vim /etc/httpd/conf/httpd.con   ##编辑主配置文件



4./etc/init.d/httpd  restart     ##重启服务   

<3>测试

浏览器访问www.westos.org并刷新页面

使用命令curl  www.westos.org,为方便观测使用for语句:

for i  in  {1..10};do curl  www.westos.org;done

##执行curl命令10次





六、CDN推送

   CDN推送:varnish有一定的缓存时间,当后台服务器有更新时,varnish端并不能及时同步更新,此时就可以使用推送器将后台服务器的更新信息及时推送给varnish端。

    为方便实验,可以选择在装有varnish的主机安装以下服务,注意监听端口的设置。

<1>server1端安装阿帕奇

1.yum install  httpd  -y    ##安装apache服务      

2.vim /etc/httpd/conf/httpd.conf

修改内容:将监听端口改为8080,Apache默认监听80端口,会与varnish冲突(二.<1>中的配置过程)

       136Listen 8080

       :wq

3./etc/init.d/httpd  start

<2>server1端安装推送器

1.unzip bansys.zip  -d  /var/www/html

##解压至Apache发布目录

2.mv /var/www/html/bansys/* /var/www/html/

3.vim /var/www/html/config.php

保留如下内容,其余信息注释掉:

       <?php

              //varnish主机列表,可以有多个

              $var_group1 = array(

                     'host'=> array('172.25.13.1'),

                     'port'=> '80',

                     );

              //对主机列表进行绑定,指定某域维护的主机,

              $VAR_CLUSTER = array(

                         'www.westos.org' =>$var_group1,            #映射至主集列表

                          );

              //varnish版本

             //2.x和3.x推送命令不一样,本主机使用的是3.0版本的varnish

             $VAR_VERSION= "3";

       ?>



<3>推送器需要php支持,见上文的推送器配置文件config.php

  yum  install  php  -y

<4>varnish端--server1设置访问控制

1.vim /etc/vanish/default.vcl

添加内容:

       acl  westos {

              "127.0.0.1";   

              "172.25.0.0"/24;

              }

       ##设置可以清缓存的用户(连接80端口)

接入函数添加内容:

       sub  vcl_recv {

              if (req.request == "BAN") {

                     if(!client.ip ~ westos) {

                            error 405 "Not allowed";}

              ban("req.url ~" + req.url);

              error 200 "ban added";

       注释掉负载均衡函数中的return (pass);

              }

##若是缓存推送请求,通过url哈希算法来判断推送用户的ip是否被允许(aci  westos函数)

2./etc/init.d/varnish  reload



<4>测试端测试

1.浏览器访问172.25.13.1--推送器端,页面显示如下:



2.浏览器访问域名,或使用curl命令:访问www.westos.org时,会清空/下所有缓存;访问www.westos.org/index.html时,将只清空index.html缓存。



3.后台服务器更新:vim /var/www/html/index.html  ##修改Apache首页内容



4.CDN推送

选择HTPP推送,推送内容/index.html,此处的/ 表示Apache的根--发布目录



5.再访问域名,查看是否更新

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: