varnish服务

server1:搭载varnish服务

server2:搭载http服务

server3:搭载http服务

station(宿主机):客户端

一个varnish服务的完整过程

首先在server2主机上发布一个http服务,内容为www.vaon.com 然后将server1主机配置成为一个varnish缓存服务器,server1可以自动从server2上取http服务的数据。然后宿主机(客户端)访问server1就可以看到server1里面缓存的内容了,相当于间接看到了server2主机http服务里面的内容

server1(172.25.254.11):

1.下载varnish安装包(3.0.5版本)

链接:https://pan.baidu.com/s/1caio96T6hCEuYFt7P04-RQ
提取码:ed4d

2.使用yum安装可以自动解决依赖性

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

安装过程会自动创建varnish用户(varnish:x:498:499:Varnish Cache:/var/lib/varnish:/sbin/nologin)

3.修改配置文件

vim /etc/sysconfig/varnish

#将监听端口改为80 
66 VARNISH_LISTEN_PORT=80

vim /etc/varnish/default.vcl

  #将这里的ip改为发布服务的主机ip(server2),端口号为发布的服务所属的端口号
7 backend default { 8 .host = "172.25.254.12"; 9 .port = "80"; 10 }

在server2(172.25.254.12)主机上发布一个http服务(使用默认配置即可),在/var/www/html/index.html里写上<h1>www.vaon.com</h1>

4.开启服务

/etc/init.d/varnish start

测试:

将宿主机器(172.25.254.10)作为客户端,访问服务

1).在宿主机上做本地解析

[root@station ~]# vim /etc/hosts

172.25.254.11 server1 www.vaon.org

2).访问网址:www.vaon.org

查看缓存命中情况

[root@server1 ~]# vim /etc/varnish/default.vcl

 12 sub vcl_deliver {
 13 if (obj.hits > 0) {
 14 set resp.http.X-Cache = "HIT from vaon cache";
 15 }
 16 else {
 17 set resp.http.X-Cache = "MISS from vaon cache";
 18 }
 19 return (deliver);
 20 }

[root@server1 ~]# /etc/init.d/varnish reload

测试:

[root@station ~]# curl -I www.vaon.org
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Sat, 20 Jan 2018 15:53:07 GMT
ETag: "2021b-16-56337316d9e9c"
Content-Type: text/html; charset=UTF-8
Content-Length: 22
Accept-Ranges: bytes
Date: Sat, 20 Jan 2018 16:17:40 GMT
X-Varnish: 1519431570
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from vaon cache       #未命中

[root@station ~]# curl -I www.vaon.org
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Sat, 20 Jan 2018 15:53:07 GMT
ETag: "2021b-16-56337316d9e9c"
Content-Type: text/html; charset=UTF-8
Content-Length: 22
Accept-Ranges: bytes
Date: Sat, 20 Jan 2018 16:17:42 GMT
X-Varnish: 1519431571 1519431570
Age: 2
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from vaon cache        #命中

#每过一秒,Age加1,到120秒为一个轮回,在0秒的时候X-Cacheh会出现miss,然后server1会再次从server2主机取网页缓存,并且Age从1开始重新计时。这个秒数取决于/etc/sysconfig/varnish文件里的95行VARNISH_TTL=120等于多少就缓存多少秒

#varnishadm ban.url .*$ #可以清除所有缓存,使Age从0重新开始

通过 varnishadm 手动清除缓存方法:

 varnishadm ban.url .*$
#清除所有
 varnishadm ban.url /index.html
#清除 index.html 页面缓存
 varnishadm ban.url /admin/$
#清除 admin 目录缓存

增加一台http服务器

在server3(172.25.254.13)主机上搭建一个http服务,/var/www/html/index.html内容为<h1>bbs.vaon.com</h1>

修改配置文件:

[root@server1 ~]# vim /etc/varnish/default.vcl

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

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

sub vcl_recv {
if (req.http.host ~ "^(www.)?vaon.org") {    #表示用户输入网址时只识别vaon.org结尾的域名,(www)表示可要可不要
set req.http.host = "www.vaon.org";
set req.backend = web1;              #表示访问www.vaon.org实际调用web1函数
} elsif (req.http.host ~ "^bbs.vaon.org") {
set req.backend = web2;
} else {error 404 "vaon cache";    #如果用户输入的网址也不是bbs.vaon.org的话就输出404错误
}
}

[root@server1 ~]# /etc/init.d/varnish reload

客户端增加hosts本地解析

[root@station ~]# vim /etc/hosts

172.25.254.11 server1 www.vaon.org bbs.vaon.org

负载均衡

在server3上增加一个虚拟主机,并发布一个和server1一样的http网页

[root@server3 ~]# vim /etc/httpd/conf/httpd.conf 

#在990行打开这个注释
NameVirtualHost *:80

 #在末尾增加如下配置

 <VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName bbs.vaon.org
 </VirtualHost>

 
  

 <VirtualHost *:80>
 DocumentRoot /www
 ServerName www.vaon.org
 </VirtualHost>

[root@server3 ~]# mkdir /www
[root@server3 ~]# vim /www/index.html

#写上和server1一样的内容,再加一条--from server3作为标记,后面做测试比较方便识别
<h1>www.vaon.com--from server3</h1>

[root@server3 ~]# /etc/init.d/httpd restart

server1:

[root@server1 ~]# vim /etc/varnish/default.vcl

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

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

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

sub vcl_recv {
if (req.http.host ~ "^(www.)?vaon.org") {
set req.http.host = "www.vaon.org";
set req.backend = lb;          #访问vaon.org时候lb去均衡调度web1和web2
return (pass);

#加上pass这一条只是为了方便测试,可以不进行缓存,不用等120秒才能轮叫(负载均衡)一次。但是不缓存就相当于varnish失去了它的价值,正常情况下没有这一行。
} elsif (req.http.host ~ "^bbs.vaon.org") {
set req.backend = web2;
} else {error 404 "vaon cache";
}

}

[root@server1 ~]# /etc/init.d/varnish reload

测试:两个页面每刷新一次就换着出现一次

cdn推送

为了节省资源,将cdn推送软件安装到varnish服务器上(server1),实际环境可以安装到一台新主机上。

推送的本质就是执行一条清除缓存的命令将varnish服务器中的缓存清除。

1.安装http,用来发布cdn推送软件(cdn推送软件本身是php写的,需要发布到web上去使用)

[root@server1 ~]# yum install httpd -y

[root@server1 ~]# vim /etc/httpd/conf/httpd.conf

Listen 8080   #为了不与varnish服务的80端口冲突,将http的端口改为8080

[root@server1 ~]# /etc/init.d/httpd start

2.下载软件

链接:https://pan.baidu.com/s/18xSgL6ObDCoqIu3aHeiUBg
提取码:i65w

3.安装

由于是zip包,安装unzip解压工具:

[root@server1 mnt]# yum install unzip -y

[root@server1 mnt]# unzip -x bansys.zip

将解压出的文件放到http默认发布目录下:

[root@server1 mnt]# cd bansys

[root@server1 bansys]# mv * /var/www/html/

bansys包需要php支持:

[root@server1 bansys]# yum install php -y

修改bansys配置文件:

[root@server1 bansys]# cd /var/www/html/

[root@server1 html]# vim config.php   #修改保留下面的内容,其余删除

<?php

 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.254.11'),
                                                'port' => '80',
                    );

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

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

?>

 

在varnish服务里做一些限制,只让特定的用户可以推送,提高安全性:

[root@server1 html]# vim /etc/varnish/default.vcl      #增加黄色部分

acl vaon {
"127.0.0.1";
"172.25.254.0"/24;
}

#将本地和172.25.254网段加入vaon列表

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

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

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

sub vcl_recv {

if (req.request == "BAN") {
if (!client.ip ~ vaon) {    #表示如果主机不在vaon列表中就返回405错误
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}

if (req.http.host ~ "^(www.)?vaon.org") {
set req.http.host = "www.vaon.org";
set req.backend = lb;
#return (pass);       #记得这个一定要注释了,上一个实验只是为了实验效果,varnish运行是不能有这个配置的
} elsif (req.http.host ~ "^bbs.vaon.org") {
set req.backend = web2;
} else {error 404 "vaon cache";
}
}

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

}

4.测试

先查看一下客户端访问www.vaon.org的结果:

[vaon@station ~]$ curl www.vaon.org
<h1>www.vaon.com</h1>

#可见是server2的http发布内容

访问bansys软件:

确认提交 :

客户端查看现在访问www.vaon.org返回的页面:

[vaon@station ~]$ curl www.vaon.org
<h1>www.vaon.com--from server3</h1>

#可见推送成功,缓存已经被清空了,现在访问的是server3的http中的内容。

转载于:https://www.cnblogs.com/vaon/p/8322488.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值