Varnish反向代理

准备工作

准备一台本机作为测试机,三台虚拟机:
server1:172.25.24.1
server2:172.25.24.2
server3:172.25.24.3
作为服务器

1.配置反向代理

VCL处理
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

在代理服务器server1上

##安装varnish软件包
yum install varnish-3.0.5-l.e16.x86_64.rpm varnish-libs-3.0.5-l.e16.x86_64.rpm
##查看varnish配置文件,查看其工作环境
vim /etc/sysconfig/varnish 

在这里插入图片描述


##向系统声明varnish所需的工作环境
vim /etc/security/limits.conf
varnish         -       nofile          131072
varnish         -       memlock         82000
varnish         -       nproc           unlimited

在这里插入图片描述

##配置varnish服务
vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.24.2";  ##指定默认后台服务器为172.25.24.2
  .port = "80";				##指定连接端口为80
}

##配置varnish服务端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80   ##第66行,修改端口为80

/etc/init.d/varnish restart   ##重启varnish服务

在这里插入图片描述
在这里插入图片描述

在默认后台服务器server2上

##下载httpd服务并设置默认发布页内容为server2
yum install httpd -y
vim /var/www/html/index.html
server2:www.westos.org
/etc/init.d/httpd start

在测试机上:

##当我们访问172.25.24.1时,看到的是server2的网页,说明实验成功
[root@foundation24 ~]# curl 172.25.24.1
server2:www.westos.org

在这里插入图片描述

2.查看缓存命中的情况

在代理服务器server1上

vim /etc/varnish/default.vcl 
sub vcl_deliver {
if (obj.hits>0){
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X0Cache = "MISS from westos cache";
}
return (deliver);
}

/etc/init.d/varnish reload

在这里插入图片描述

##缓存的刷新:
varnishadm ban.url .*$				    ##清除所有
varnishadm ban.url  /index.html   ##清除index.html网页缓存
varnishadm ban.url /admin/$		##清除admin目录缓存

测试:
在测试机上

##可以从X0Cache:栏看出缓存情况
##X0Cache: MISS from westos cache 说明没有缓存
##X-Cache: HIT from westos cache 说明数据来源来自缓存
curl -I 172.25.24.1

在这里插入图片描述
在这里插入图片描述

##先在代理服务器上清楚缓存
curl  -I 172.25.24.1/index.html

在这里插入图片描述

在这里插入图片描述

3.定义不同站点的后端服务器

通过域名反向代理会把你带到不同的后端服务器

在代理服务器上

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

backend web2 {
  .host = "172.25.24.3";
  .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 "error";
}
}

/etc/init.d/varnish reload

在这里插入图片描述
在这里插入图片描述

在后台服务器server3上

yum install httpd -y
vim /var/www/html/index.html
server3:bbs.westos.com

在测试端:

##配置本地解析
[root@foundation24 ~]# vim /etc/hosts
172.25.24.1 server1 www.westos.org bbs.westos.org westos.org

##通过域名反向代理会把你带到不同的后端服务器
[root@foundation24 ~]# curl westos.org
server2:www.westos.com
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.com

在这里插入图片描述

4.负载均衡配置:

1)什么是负载均衡:
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

2)负载均衡的作用:
(1)解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

(2)提供故障转移,实现高可用;

(3)通过添加或减少服务器数量,提供网站伸缩性(扩展性);

(4)安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

3)负载均衡的搭建
在代理服务器上

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


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

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

director lb round-robin {  ###把多个后端聚合为一个组,实现轮循
        { .backend = web1;}
        { .backend = web2;}
}


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

在这里插入图片描述

在这里插入图片描述

在server3服务器上

##配置两台httpd虚拟主机并分别设置两台虚拟主机默认发布页面信息
[root@server3 html]# mkdir /www
[root@server3 html]# cd
[root@server3 ~]# cd /www/
[root@server3 www]# vim index.html
server3:www.westos.org

[root@server3 www]# mkdir /bbs
[root@server3 www]# cd /bbs/
[root@server3 bbs]# vim index.html
server3:bbs.westos.org
##开启httpd虚拟主机功能
[root@server3 bbs]# vim /etc/httpd/conf/httpd.conf 
 990 NameVirtualHost *:80  ##开启虚拟主机

1003 <VirtualHost *:80>
1004     DocumentRoot /www
1005     ServerName www.westos.org
1006 </VirtualHost>
1007 <VirtualHost *:80>
1008     DocumentRoot /bbs
1009     ServerName bbs.westos.org
1010 </VirtualHost>

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

在这里插入图片描述

在测试机上:

##访问www.westos.org网页可以看到访问的服务器是在server2与server3循环轮换的

[root@foundation24 ~]# curl www.westos.org
server2:www.westos.org
[root@foundation24 ~]# curl www.westos.org
server3:www.westos.org
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.org

在这里插入图片描述

5.varnish cdn 推送平台

在代理服务器server1上:

##下载php,uzip,http服务并将推送平台压缩包解压到http共享目录下
[root@server1 ~]# yum install unzip php httpd -y
[root@server1 ~]# unzip bansys.zip -d /var/www/html/
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# mv bansys/* .

##编辑php文件,只保留如下设置,其余注释掉
[root@server1 html]# vim config.php 

<?php
 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.24.1'),
                                                'port' => '8080', 
                    );

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


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

?>
##bansys 有两种工作模式,分别是:telnet 和 http 模式。
##telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
##如果是 http 模式需要对 varnish 做以下设置:
[root@server1 html]# vim /etc/varnish/default.vcl 

acl westos {
#设置访问控制
"127.0.0.1";
"172.25.24.0"/24;
}


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

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

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

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


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 "error";
}
}
[root@server1 html]# /etc/init.d/varnish reload

进行推送:

(1)打开浏览器,访问172.25.24.1:8080端口
firefox
172.25.24.1:8080
在这里插入图片描述

(2)选择HTTP

在这里插入图片描述

(3)输入推送内容,并提交,推送成功:

/index.html

在这里插入图片描述

测试:通过CDN推送手动刷新缓存
(1)在测试机上:

##由于缓存功能开启所以在一定时间内访问www.westos.org/index.html得到的内容都是来自缓存
[root@foundation24 varnish]# curl www.westos.org/index.html
server2:www.westos.org

在这里插入图片描述

(2)在服务器server1上重新推送/index.html
(3)再在测试机上访问www.westos.org/index.html

##由于手动推送将缓存刷新,再次访问进入了其他的后台服务器
[root@foundation24 varnish]# curl www.westos.org/index.html
server3:www.westos.org

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值