varnish搭建cdn网络

varnish搭建cdn网络

概述:

client->dns->cdn->server->cdn->cache->client

CDN分发网络:

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

用varnish实现CND:

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

 

处理过程大致分为如下几个步骤:

(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或

Pipe,或者进入 Lookup(本地查询)。

(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进

入 miss 状态。

(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。

(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地

的存储。

(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

##安装

http :// repo . varnish - cache . org / redhat / varnish -3.0/ el 6/ x 86_64/

yum localinstall varnish-3.0.3-1.el6.x86_64.rpm

varnish-libs-3.0.3-1.el6.x86_64.rpm  -y

 

1.查看缓存命中情况

准备工作:

在westos1里:

(1)更改ip

cd /etc/sysconfig/network-scripts

ls

vim ifcfg-eth0

######

/etc/init.d/network   restart  #重启网络

ip addr   #查看ip

(2)更改主机名

hostname server1  

hostname   #查看主机名

 

同理:在westos2里:

设定ip为172.25.52.22

更改主机名为server2

实验:

在主机中

下载 varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm

 

再打开两个shell

ssh连接server1和server2

 

在server1和server2中

# 这样才能使用scp命令

yum whatprovides */scp   # 找安装包

yum install openssh-clients-5.3p1-94.el6.x86_64 -y  #安装

 

在主机中

将下载的包scp传给sever1和server2

scp varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm root@172.25.52.11:

scp varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm root@172.25.52.22:

 

在server1中(cdn服务器)

ls

yum install * -y   # 安装varnish

/etc/init.d/varnish start  # 打开服务

##配置varnish服务端口

vim /etc/sysconfig/varnish

###########

更改:

66 VARNISH_LISTEN_PORT=80

 

vim /etc/sysconfig/varnish   #查看数据

############

#编辑限制cpu最大处理文件

vim /etc/security/limits.conf   

#############

添加:

varnish     -    nofile    131073

varnish     -    memlock   82000

varnish     -    nproc     unlimited

 

/etc/init.d/varnish reload   #重新加载varnish服务

cd /etc/varnish/

ls

##配置一个后端服务器

vim default.vcl

########

更改:

backend default {

  .host = "172.25.52.22";  #server2的ip

  .port = "80";

}

 

 

在server2里(apache后台服务器):

yum install httpd -y

/etc/init.d/httpd start

#apache默认发布目录为/var/www/html

cd /var/www/html

vim index.html

######

写入:

www.westos.org

 

在主机里:

#本地解析(做本地解析是为了可以在网页上进行测试)

vim /etc/hosts

#######

添加:

172.25.52.11  server1  www.westos.org

 

在网页上测试:

输入172.25.52.11 会出现 www.westos.org

输入www.westos.org 会出现 www.westos.org

 

在server1里

cd /etc/varnish/

vim default.vcl

#######

添加:

##查看缓存命中情况

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);

}

/etc/init.d/varnish reload

 

在主机里

#本地解析

vim /etc/hosts

#######

添加:

172.25.52.11  www.westos.org

 

 

测试:

在主机中

curl www.westos.org -I

curl www.westos.org -I

 

 

##通过 varnishadm 手动清除缓存

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

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

# varnishadm ban.url /admin/$       #清除 admin 目录缓存

 

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

准备工作:

再添加一个westos3子盘

并更改ip为172.25.52.33

更改主机名为server3

 

实验:

在server3中:

yum install httpd -y

/etc/init.d/httpd  start

cd /var/www/html

vim index.html

######

写入:

bbs.westos.org

 

在server1中:

cd /etc/varnish/

vim default.vcl

#######

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

更改:

backend web1 {

  .host = "172.25.52.22";

  .port = "80";

}

添加:

backend web2 {

  .host = "172.25.52.33";

  .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 = web1;

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

set req.backend = web2;

} else {error 404 "westos cache";

}

}

/etc/init.d/varnish reload

在主机中:

vim /etc/hosts

#####

添加:

172.25.52.11  www.westos.org  bbs.westos.org

 

 

测试:

在真机中:

curl 172.25.52.11/index.html -I

curl  www.westos.org/index.html -I

curl bbs.westos.org/index.html -I

当访问 www.westos.org 域名时,从 web1(server2 172.25.52.22) 上取数据,缓存在cdn中

当访问 bbs.westos.org 域名时,从 web2(server3 172.25.52.33) 上取数据,缓存在cdn中

 

3.定义负载均衡

在server3中:

cd /var/www/html

mkdir  /www1

cd /www1

vim index.html

#####

写入:

www.westos.org  server3

vim /etc/httpd/conf/httpd.conf

#######

取消注释:

990 NameVirtualHost *:80

添加:

1010 <VirtualHost *:80>

1011     DocumentRoot /var/www/html

1012     ServerName bbs.westos.org

1013 </VirtualHost>

1014

1015 <VirtualHost *:80>

1016     DocumentRoot /www1

1017     ServerName www.westos.org

1018 </VirtualHost>

/etc/init.d/httpd reload

在server1中:

cd /etc/varnish

vim default.vcl

######

添加:

#把多个后端聚合为一个组,并检测后端健康状况

director lb round-robin {

{

.backend = web1;

 

}

{

.backend = web2;

}

}

更改:

#当访问 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 = lb;

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

set req.backend = web2;

} else {error 404 "westos cache";

}

}

 

vim /etc/hosts

#####

更改:

172.25.52.03    server3  www.westos.org  bbs.westos.org

 

 

在server2中

cd /var/www/html

vim  index.html

######

更改:

www.westos.org  server2

 

测试:

curl www.westos.org

在server1中:

cd /etc/varnish

vim default.vcl

######

更改:

sub vcl_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";

}

}

 

测试:

curl www.westos.org

 

3.varnish cdn 推送平台

在主机中:

下载   bansys.zip 并用scp传给server1

 systemctl stop firewalld

 systemctl restart httpd

 

在server1里:

yum install httpd -y

/etc/init.d/httpd start

vim /etc/httpd/conf/httpd.conf

######

Listen 8080  #修改端口

 

yum install php -y

yum install unzip -y

unzip bansys.zip  -d /var/www/html   #解压

cd /var/www/html/bansys/

ls

 mv * ..

 ls

cd ..

 ls

 vim config.php

#####

/etc/init.d/httpd restart

netstat -antlp

在网页测试:

输入172.25.52.11:8080

在server1里

 cd /etc/varnish/

 vim default.vcl

######

添加:

##设定访问控制

acl westos {

"127.0.0.1";

"172.25.52.0"/24;

}

sub vcl_recv {

添加:

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

if (!client.ip ~ westos) {

error 405 "Not allowed.";

}

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

error 200 "ban added";

}

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";

}

}

 

 /etc/init.d/varnish reload

 

在网页上测试:

输入172.25.52.11:8080   

选择HTTP  ---------->     输入 /index.html   ---------> 提交

 

在主机中测试:

curl  www.westos.org/index.html

每提交一次就会更改一次

提交之前:

提交之后:

 

总结:

(1)如果ssh连接不了虚拟机,则:

vim .ssh/known_hosts

###########

删除所有内容

 

(2)排错思想:

如果所有操作都做完了但仍然没有出现正确的现象该怎么办?

此时需要检查:

火墙是否关闭            /etc/init.d/iptables stop

apache是否打开         /etc/init.d/httpd restart

varnish服务是否重启    /etc/init.d/varnish restart

varnish的重新加载     /etc/init.d/varnish reload

配置文件是否编写正确

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值