varnish反向代理的搭建

当客户端访问服务器时,首先到达的是CDN反向代理,如果代理没有找到需要的资源,再到达后端服务器。之前写过使用squid做CDN的反向代理,但varnish是开源的高性能的HTTP加速器,挪威最大的在线报纸 Verdens Gang 仅使用了3台Varnish就代替了原来的12台Squid,性能比以前更好。所以大多数公司都使用varnish来做CDN的反向代理。

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率(hit/(hit+miss) )。CDN的关键技术主要有内容存储和分发技术。 —来自百度百科
CDN的缓存有生命周期,会定期清理,也会在缓存空间耗尽的时候将LRU(最近最少使用)清理掉。
URL:当用户发出请求时,首先会查询缓存,然后进行新鲜度检测,如果不够新鲜会重新读取,再给用户发送发送响应并记录到日志。

接下来进行varnish反向代理的搭建

我们使用两台虚拟机
server1:作代理主机
server2:作被访问的主机
在server1上:

1.首先在官网上获取varnish的资源

2.安装varnish

在这里插入图片描述

rpm -qc varnish-3.0.5-1.el6.x86_64			##查看配置文件位置

在这里插入图片描述
查看配置文件
在这里插入图片描述
最大打开文件个数:(NFILES=131072)
内存需求:(MEMLOCK=82000)
进程数:(NPROCS=“unlimited”)不限制
查询系统信息

ulimit -l				#查看系统内存信息
sysctl -a | grep file	#查看系统文件数

在这里插入图片描述
我们的最大打开文件数满足需求但是内存不满足,这时候我们需要让varnish受到限制。

3.添加信息

在varnish开启时会产生root和自身的两个进程,我们可以在/etc/security/limits.conf添加信息,让varnish以为自己会得到想要的一切。

vim /etc/security/limits.conf
varnish         -       nofile          131072
varnish         -       memlock         82000
varnish         -       nproc           unlimited

在这里插入图片描述

4.修改通过代理服务器要访问的主机

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

在这里插入图片描述

5.修改端口

vim /etc/sysconfig/varnish
66 VARNISH_LISTEN_PORT=80

6.重启服务

/etc/init.d/varnish restart
netstat -antlp | grep 80(查看端口)

在这里插入图片描述
server2主机上

1.安装apache服务

yum install httpd -y

2.编写默认发布文件

vim /var/www/html/index.html
server2.example.com

3.重启httpd服务

/etc/init.d/httpd restart

测试:

在这里插入图片描述
在浏览器输入代理的ip,实际上看到的是服务器

如何查看是否名中缓存

1.在配置文件编辑是否命中的反馈信息

vim /etc/varnish/default.vcl
11 
12 sub vcl_deliver {
13 if (obj.hits>0){		
14 set resp.http.X-Cache = "HIT from westos cache";		#命中显示
15 }
16 else {
17 set resp.http.X-Cache = "MISS from westos cache";	#未命中显示
18 }
19 return (deliver);
20 }

在这里插入图片描述

2.重新让读取配置文件(一定不能restart)

/etc/init.d/varnish reload

3.在客户端验证是否命中代理的缓存

curl -I 172.25.80.1

在这里插入图片描述

4.清理代理的缓存信息

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

varnishadm ban.url /index.html	#清除url部分,可能并不会达到效果(再次执行清除所有缓存的命令)
客户端再次访问172.25.80.1/index.html 会未命中

验证:清一次在客户端进行查看

注意:默认的缓存存在最大时间是120s(/etc/sysconfig/varnish)

定义不同域名站点的后端服务器,通过域名会访问不同的后端服务器

首先打开server3
打开httpd服务

vim /var/www/html/index.html
server3.example.com

1.修改配置文件

vim /etc/varnish/default.vcl
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";			#将以www.westos.org开头,但可以忽略www的网址提议规定为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

2.修改server2和server3后端服务器的默认发布页面

server2:
server2:www.westos.org

server3:
server3:bbs.westos.org

3.在客户端进行地址解析

vim /etc/hosts
  4 172.25.80.1     server1 www.westos.org bbs.westos.org

在这里插入图片描述

测试

在这里插入图片描述

负载均衡

目的: 让客户端访问www.westos.org的时候,客户端主机server2和server3轮循;访问bbs.westos.org时,只访问server3

1.在server1上设定varnish代理主机配置文件

vim /etc/varnish/default.vcl
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;		##当访问www.westos.org时进入轮询
 return (pass);		#跳过缓存,便于看到实验效果
} elsif (req.http.host ~ "^bbs.westos.org") {
        set req.backend = web2;
} else {
        error 404 "westos cache";
}
}

在这里插入图片描述

/etc/init.d/varnish reload

在这里插入图片描述

测试

在这里插入图片描述

2.在server3上建立虚拟主机

vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot /www
    ServerName www.westos.org
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /bbs
    ServerName bbs.westos.org
</VirtualHost>

在这里插入图片描述

mkdir /www
vim /www/index.html
<h1>server3 - www.westos.org</h1>
mkdir /bbs
vim /bbs/index.html
<h1>server3 - bbs.westos.org</h1>

测试

在这里插入图片描述

搭建清理缓存的推送平台

1.首先在server1上开启httpd服务

2.获取平台的搭建资源并解压

yum install unzip-6.0-1.el6.x86_64 -y
unzip bansys.zip -d /var/www/html
mv /var/www/html/bansys/* /var/www/html

3.下载php服务

yum install php -y

4.修改配置文件

vim /var/www/html/config.php
<?php
 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.80.1'),
                                                'port' => '8080',                
                    );


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


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

?>

在这里插入图片描述

5.修改httpd端口启动服务

vim /etc/httpd/conf/httpd.conf
Listen 8080
/etc/init.d/httpd start

在这里插入图片描述
查询端口

netstat -tnlp
tcp        0      0 :::8080                     :::*          

6.修改varnish的配置文件

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

在这里插入图片描述

测试

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值