Varnish搭建CDN

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

Varnish原理:varnish是一个http反向代理的缓存。它从客户端接收请求然后尝试从缓存中获取数据来响应客户端的请求,如果varnish不能从缓存中获得数据来响应客户端,它将转发请求到后端(backend servers),获取响应同时存储,最后交付给客户端。

具体配置:
server1 充当varnish server2和3充当服务器
server1: 172.25.62.1
server2:172.25.62.2
server3:172.25.62.3
真机:172.25.62.250
server1上获取安装包进行安装

安装完成之后开始文件配置

[root@server1 ~]# vim /etc/security/limits.conf  ##修改最大文件数
varnish  - 65535              #在最后一行添加
[root@server1 ~]# vim  /etc/sysconfig/varnish    
##因为要用http服务测试所以把varnish的端口改为80 并且修改最大文件数
  8 NFILES=65535
 66 VARNISH_LISTEN_PORT=80
[root@server1 ~]# vim /etc/varnish/default.vcl   ##修改varnish配置文件
  8   .host = "172.25.62.2";                     ##后端服务器的ip
  9   .port = "80";                              ##端口
[root@server1 ~]# /etc/init.d/varnish start      ##启动varnish

server2上:在server上安装httpd服务并在默认发布目录下写入文件

[root@server2 ~]# yum install httpd -y  
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim index.html
<h1>hello server2</h1>
[root@server2 html]# /etc/init.d/httpd start   ##开启服务

测试: 在浏览器输入server1的ip(172.25.62.1)看见的是server2中index.html中的内容 如果无法访问可能是你的防火墙没关

2.利用varnish查看缓存命中情况
需要在真机上添加本地解析

[root@foundation62 varnish]# vim /etc/hosts
172.25.62.1 www.westos.org bbs.westos.org

在server1上:

[root@server1 ~]# vim /etc/varnish/default.vcl   ##添加下面内容到配置文件
 11 sub vcl_deliver { 
 12 if (obj.hits > 0) { 
 13 set resp.http.X-Cache = "HIT from westos cache";
 14 }
 15 else { 
 16 set resp.http.X-Cache = "MISS from westos cache";
 17 }
 18 return (deliver);
 19 } 
[root@server1 ~]# /etc/init.d/varnish restart    ##重启服务

##检测:真机(客户端) curl -I www.westos.org  
#第一次没找到,会去server2服务器找(返回的age的值为0)找到后会缓存起来
curl -I www.westos.org  
#第二次直接从缓存区域拿出来,提供给客户端



3.负载均衡
定义多个不同域名站点的后端服务器 访问其他域名时报错404
新开一台机器server3安装htpd服务 同样在默认发布目录下写上文件

[root@server3 ~]# yum install -y httpd
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html
<h1>hello server3</h1>
[root@server3 html]# /etc/init.d/httpd start

在server1上:

[root@server1 ~]# vim /etc/varnish/default.vcl 
  7 backend web1 {
  8   .host = "172.25.62.2";
  9   .port = "80";
 10 }
 11 backend web2 {
 12   .host = "172.25.62.3";
 13   .port = "80";
 14 }
 15 sub vcl_recv {
 16 if (req.http.host ~ "^(www.)?westos.org") {
 17 set req.http.host = "www.westos.org";
 18 set req.backend = web1;     ##当访问www.westos.com时从web1上获取数据
 19 } elsif (req.http.host ~ "^bbs.westos.org") {
 20 set req.backend = web2;     ##当访问bbs.westos.com时从web2上获取数据
 21 } else {error 404 "westos cache";    ##访问其他域名时报错
 22 }
 23 }
 24 sub vcl_deliver {
 25 if (obj.hits > 0) {
 26 set resp.http.X-Cache = "HIT from westos cache";
 27 }
 28 else {
 29 set resp.http.X-Cache = "MISS from westos cache";
 30 }
 31 return (deliver);
 32 }
[root@server1 ~]# /etc/init.d/varnish restart     #$重启服务


测试:


4.轮询
在server1上:

  7  backend web1 {
  8 .host = "172.25.62.2";   ##web1对应的IP是172.25.62.2
  9 .port = "80";
 10 }
 11 backend web2 {
 12   .host = "172.25.62.3";   ##web2对应的IP是172.25.62.3
 13   .port = "80";
 14 }
 15 director lb round-robin {
 16 { .backend = web1; }
 17 { .backend = web2; }
 18 }
 19 sub vcl_recv {
 20 if (req.http.host ~ "^(www.)?westos.org") {
 21 set req.http.host = "www.westos.org";
 22 set req.backend = lb;
 23 return (pass);
 24 } elsif (req.http.host ~ "^bbs.westos.org") {
 25 set req.backend = lb;
 26 return (pass);      ##为了测试方便不进行缓存
 27 } else {error 404 "westos cache";
 28 }
 29 }
 30 
 31 sub vcl_deliver {
 32 if (obj.hits > 0) {
 33 set resp.http.X-Cache = "HIT from westos cache";
 34 }
 35 else {
 36 set resp.http.X-Cache = "MISS from westos cache";
 37 }
 38 return (deliver);
 39 }
[root@server1 ~]# /etc/init.d/varnish restart



测试:在真机上  curl  www.westos.org 重复几次会得到不同的index.html结果


5.varnish搭建cdn推送平台
在server1上安装php和httpd 并将httpd的端口改为8080

[root@server1 ~]# yum install -y php httpd
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf
 136 Listen 8080
[root@server1 ~]# /etc/init.d/httpd start
2.获取bansys.zip包并解压到apache默认发布目录下   
[root@server1 ~]# unzip bansys.zip -d /var/www/html/##没有unzip命令可以用yum安装 -d指定目录
[root@server1 ~]# cd /var/www/html/bansys/
[root@server1 bansys]# vim config.php 
<?php
 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.6.2.1'),
                                                'port' => '8080',                                                   );
 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.westos.org' => $var_group3,
                                             'bba.westos.org' => $var_group1,
                     );


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

?>


server1上修改varnish文件

[root@server1 bansys]# vim /etc/varnish/default.vcl 
 7 acl westos{
  8 "127.0.0.1";
  9 "172.25.62.0"/24;
 10 }
 11  backend web1 {
 12 .host = "172.25.62.2";   ##web1对应的IP是172.25.62.2
 13 .port = "80";
 14 }
 15 backend web2 {
 16   .host = "172.25.62.3";   ##web2对应的IP是172.25.62.3
 17   .port = "80";
 18 }
 19 director lb round-robin {
 20 { .backend = web1; }
 21 { .backend = web2; }
 22 }
 23 sub vcl_recv {
 24 if (req.request == "BAN"){
 25 if (!client.ip ~ westos){
 26 error 405 "Not allowed.";
 27 }
 28 ban("req.url ~ " + req.url);
 29 error 200 "ban added";
 30 }
 31 if (req.http.host ~ "^(www.)?westos.org") {
 32 set req.http.host = "www.westos.org";
 33 set req.backend = lb;
 34 return (pass);
 35 } elsif (req.http.host ~ "^bbs.westos.org") {
 36 set req.backend = lb;
 37 return (pass);      ##为了测试方便不进行缓存
 38 } else {error 404 "westos cache";
 39 }
 40 }
 41 sub vcl_deliver {
 42 if (obj.hits > 0) {
 42 if (obj.hits > 0) {
 43 set resp.http.X-Cache = "HIT from westos cache";
 44 }
 45 else {
 46 set resp.http.X-Cache = "MISS from westos cache";
 47 }
 48 return (deliver);
 49 }
[root@server1 bansys]# /etc/init.d/varnish restart




测试:在真机浏览器http://172.25.62.1:8080/bansys/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值