CDN(内容分发网络)加速软件:varnish(代理服务器/web服务器)

介绍:

Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。

varnish项目是2006年发布的第一个版本0.9.距今已经有十多年了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理web加速方面,varnish已经有足够能力代替squid。


本篇博客主要介绍varnish在做代理服务器方面的一些功能和用法,与squid相比较,到底胜在了何处。

实验环境:

4台PC:redhat linux7.3版本,处于同一网段,配置好IP和yum源,关闭firewalld,selinux处于disable状态 ,关闭NetworkManager【可以创建一台虚拟主机,封装作为源主机,其余都用其快照】
主机PC : 测试主机:【IP】172.25.14.250
node1 :varnish代理服务器:【IP】172.25.14.1
node2 :web服务器1:【IP】172.25.14.2
node3 :web服务器2:【IP】172.25.14.3


实验准备:

可以自行搜索下载
jemalloc-3.6.0-1.el7.x86_64.rpm 【内存管理软件包】
varnish-libs-4.0.5-1.el7.x86_64.rpm【库文件包】
varnish-4.0.5-1.el7.x86_64.rpm【软件安装包】

在这里插入图片描述


varnish服务器配置:

将上述三个软件包发送至node1服务器上,使其作为varnish服务器,进行代理服务。

yum install -y *   #将软件包中内容下载出来
rpm -qc varnish    #查看varnish配置文件
#/etc/logrotate.d/varnish       #日志配置文件、基本环境变量
#/etc/varnish/default.vcl       #主配置文件
#/etc/varnish/varnish.params    #环境配置说明文件

在这里插入图片描述
当我们安装好varnish后,系统会自动生成一个varnish用户,之后开启varnish服务后,会产生两个varnish进程,一个所有者是root,一个所有者是varnish用户。而varnish用户开启的这个进程才是主要的服务进程。root主要起监控的作用。
在这里插入图片描述

 /usr/lib/systemd/system/varnish.service
是服务启动脚本,我们vim打开查看:

LimitNOFILE=131072 #最大文件个数 :系统中的文件描述符是有限的,所以会限制能打开文件的个数。
LimitMEMLOCK=82000 #varnish服务占用系统的最大内存
在这里插入图片描述
在这里插入图片描述
在系统中:
ulimit -l 查看系统最大可加锁内存,即系统最大内存
free -m 以字节来显示当前内存的使用情况
sysctl -a | grep file #系统描述符的使用情况
因为我们这里用的是虚拟机,当内存不足时可以在虚拟机管理器中添加内存,将其改为2048【注意关机状态下修改】
在这里插入图片描述
在这里插入图片描述

 vim /etc/security/limits.conf   #更改系统参数限制文件,添加varnish的限制
 # - 代表默认类型
 #item 为对应的选择【最大限制文件】【最大锁定内存】
 #value为其值

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

 vim /etc/varnish/varnish.params  #更改varnish服务的配置文件,将监听端口改为80,因为我们后面要做代理服务器,httpd使用的是80端口

在这里插入图片描述

 systemctl start varnish   #开启varnish
systemctl status varnish    #查看varnish状态
netstat -tnlp    #查看已经开启的服务的监听端口
ps aux | grep varnish   #过滤出varnish的进程【有两个,root用户和varnish用户分别有一个】

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


第一部分:简单实现varnish代理服务器的功能:代理一个web服务器:

以上我们的varnish代理服务器node1的基础配置就完成了。下面来配置我们的web服务器1:

web服务器node2:

下载httpd服务
编写默认发布文件
开启服务
测试,完成

 yum install httpd #下载httpd服务
vim /var/www/html/index.html   #编写默认发布文件   #我写入的是www.xyy.com
systemctl start httpd   #开启服务
curl localhost     #测试,访问本地,可以看到默认发布文件中的内容

在这里插入图片描述
这样我们的web1服务器就搭建完成了。


返回varnish代理服务器,选择代理web1,更改位置文件中的IP为web1的IP

node1:varnish服务器:

 vim /etc/varnish/default.vcl       #更改配置文件,设置代理主机的IP和监听端口
 systemctl restart varnish          #重启服务

在这里插入图片描述


测试主机:

去访问我们的varnish代理服务器,会得到web服务器的资源【默认发布文件中的内容】

 curl  172.25.14.1   #访问代理服务器

在这里插入图片描述


第二部分:对有无缓存的不同返回结果

在varnish代理服务器主机上,我们写入当有缓存时和没有缓存时的不同:如果有缓存,则返回HIT from… 如果没有缓存,则返回MISS from…

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

在这里插入图片描述

改完后重启服务:systemctl restart varnish

在测试主机250上进行测试:curl IP -I
会得到第一次miss即没有缓存,第二次以及之后都是HIT,命中缓存。
在这里插入图片描述
在varnish服务器node1上,可以采用varnishadm ban req.url "~" / 来清除缓存,然后再次用测试主机访问时,就会再次变为没有缓存的miss状态了。
在这里插入图片描述
如何写varnish的配置文件可以查看varnish的官方网站,有使用说明。
https://www.varnish-software.com/
也可以使用man vcl,查看帮助文档


第三部分:代理多台web服务器:

varnish主要的两个作用:代理服务器和缓存数据。那么作为中转站点,当然不可以只转发存储一台服务器上的资源。所以我们需要再添加一个为web服务器node3,也让varnish去代理。

node3:
安装httpd,编写默认发布文件,开启服务,检测

yum install httpd -y
vim /var/www/html/index.html
systemctl start httpd
curl localhost

在这里插入图片描述

varnish代理服务器node1:
编写varnish配置文件,写入代理的两个web服务器的IP和端口,并写入调度的规则,重启服务

vim /etc/varnish/default.vcl

在这里插入图片描述

systemctl restart varnish   #重启服务

172.25.14.250测试主机进行测试:
先写入解析:vim /etc/hosts,将两个web服务器的资源写到varnish服务器的IP对应关系中,然后curl 域名 进行测试。【实现访问web1中的资源时,代理服务器会查找web1,访问web2中的资源时,代理服务器会查找web2】
在这里插入图片描述

在这里插入图片描述


第四部分:负载均衡

当主机去访问web1域名时,会通过代理服务器,让代理服务器提供答案,而代理服务器通过负载均衡模块,可以从web1和web2中轮循获得资源。

varnish代理服务器node1:

vim /etc/varnish/default.cvl

import为导入模块,使我们已经下载好的库模块
sub vcl_init_ 相当于负载均衡的函数
在下面第二张图中,我们访问www.xyy.com时,会调用该函数,使其轮循访问web2的资源
return(pass)代表不缓存,即能达到每次访问的内容不同。

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


第五部分:代理的一个站点多个域:

百度旗下的百度贴吧,百度地图,百度百科等一系列服务都在百度的主服务器上,是一个主服务器上有多个虚拟主机的应用。在代理时,也会遇到代理的一个站点有多个虚拟主机的情况。

web2:
首先我们在web2这个服务器主机上编写虚拟主机文件,使其上有多个虚拟主机。
然后创建虚拟主机的默认发布目录,并写入默认发布文件
重启httpd服务。

cd /etc/httpd/conf.d
ls
vim vhost.conf
	<VirtualHost *:80>
		DocumentRoot /www
		ServerName www.westos.org
	</VirtualHost>
	<Directory "/www">
		Require all granted
	</Directory>
	<VirtualHost *:80>
		DocumentRoot /bbs
		ServerName bbs.westos.org
	</VirtualHost>
	<Directory "/bbs">
		Require all granted
	</Directory>
#一个虚拟主机的域名和web1相同,这样当我们访问web1时,会通过代理服务器访问到web2,实现同一域名对应多态服务器主机,达到负载均衡的效果。
	mkdir /www /bbs
	vim /www/index.html
		www
	vim /bbs/index.html
		bbs
systemctl restart httpd

测试主机:
curl web1的域名,会获得为web1的资源,和web2中的相同域名的资源。而直接访问web2的资源,会通过代理服务器,再获得指定的资源。

在这里插入图片描述


第六部分:图形界面管理:

我们采用指令清除缓存的方式不是所有人都会的,所以我们需要一个图形化管理的方式。

这部分内容需要提前写好php文件,因为是以网页的形式呈现的。作者这里已经有自己的文件压缩包,所以就做一个简单的记录。

1.在varnish上安装httpd,unzip,php
2.解压php包到http默认发布目录,将解压出的目录中的所有内容移动到默认发布目录,编辑其中的config.php文件,改后图如下。
3.更改http使用的端口为8080,不和varnish冲突。
4.开启httpd服务。
5.在浏览器搜索:varnish服务器IP:8080
6.选择http,推送即要清除的文件【.*为清除所有】【/index.html清除默认发布文件,即缓存资源】

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值