1、正向代理和反向代理
通俗的说正向代理是代理服务器知道目的地址,进行访问。反向代理指的是代理服务器并不清楚是那台服务器提供服务,只知道服务器的“大门”,仅是进入,由内部服务器自行分配。
2、varnish简介
官网:varnish.org
作用:Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。现在varnish在支持HTTP的条件下也可做反向代理。
工作流程:Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。
针对文件缓存部分,master读入存储配置(-s file[,path[,size[,granularity]]] ),调用合适的存储类型,然后创建/读入相应大小的缓存大文件。接着,master初始化管理该存储空间的结构体。这些变量都是全局变量,在fork以后会被child进程所继承(包括文件描述符)。
在child进程主线程初始化过程中,将前面打开的存储大文件整个mmap到内存中(如果超出系统的虚拟内存,mmap失败,进程会减少原来的配置mmap大小,然后继续mmap),此时创建并初始化空闲存储结构体,挂到存储管理结构体,以待分配。
接着,真正的工作开始,Varnish的某个负责接受新HTTP连接的线程开始等待用户,如果有新的HTTP连接过来,它总负责接收,然后叫醒某个等待中的线程,并把具体的处理过程交给它。Worker线程读入HTTP请求的URI,查找已有的object,如果命中则直接返回并回复用户。如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再回复。
分配缓存的过程是这样的:它根据所读到object的大小,创建相应大小的缓存文件。为了读写方便,程序会把每个object的大小变为最接近其大小的内存页面倍数。然后从现有的空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。如果空闲块没有用完,就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。如果缓存已满,就根据LRU机制,把最旧的object释放掉。
释放缓存的过程是这样的:有一个超时线程,检测缓存中所有object的生存期,如果超初设定的TTL(Time To Live)没有被访问,就删除之,并且释放相应的结构体及存储内存。注意释放时会检查该存储内存块前面或后面的空闲内存块,如果前面或后面的空闲内存和该释放内存是连续的,就将它们合并成更大一块内存。
整个文件缓存的管理,没有考虑文件与内存的关系,实际上是将所有的object都考虑是在内存中,如果系统内存不足,系统会自动将其换到swap空间,而不需要varnish程序去控制。
![](https://img-blog.csdnimg.cn/20200503105033671.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
各个模块的作用:小编这里有一篇更为详细的文章,供大家参考
连接:https://www.jianshu.com/p/20350cb1c77e
3、Varnish安装与启动
3.1 官方下载rpm包(也可在小编博客进行免费下载)
3.2 进行安装
第一次安装往往会出现下面图片所提示的错误,是因为配置中缺少jemalloc安装包,需要下载安装。
![](https://img-blog.csdnimg.cn/20200502172409156.png)
安装完成后,查看其配置文件。
![](https://img-blog.csdnimg.cn/20200502174627468.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
配置文件路径:/etc/ld.so.conf.d/varnish-x86_64.conf
环境变量信息:/etc/logrotate.d/varnish
vcl语法文件:etc/varnish/default.vcl
3.4 启动信息
![](https://img-blog.csdnimg.cn/20200502175046906.png)
部分服务信息解释:
![](https://img-blog.csdnimg.cn/20200502180256279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
在做文件启动时,我们可以修改主机的系统参数或者上述文件的系统参数,均可达到对启动配置的设置。
【说明】系统最大打开文件数查看:sysctl -a | grep file;查看系统当前内存:ulimit -a。
4、修改部分参数
-a 80 修改默认端口为80,使http访问时,可直接访问,做反向代理。
-T localhost:6082 设置本地回环端口,指定命令行借口。
![](https://img-blog.csdnimg.cn/20200502180559873.png)
设置系统参数,使varnish可打开配置的参数
文件目录:/etc/syscurity/limits.conf
![](https://img-blog.csdnimg.cn/20200502181200906.png)
5、 重新启动varnish
![](https://img-blog.csdnimg.cn/20200502181620204.png)
![](https://img-blog.csdnimg.cn/20200502213915783.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
6、设置配置
6.1 配置代理主机缓存
![](https://img-blog.csdnimg.cn/20200502223614375.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
访问结果:
![](https://img-blog.csdnimg.cn/20200502223821365.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
7、通过命令行操作varnish
命令:varnishadm,varnish的专属命令行操作界面
![](https://img-blog.csdnimg.cn/2020050222422837.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
8、vcl_deliver模块
![](https://img-blog.csdnimg.cn/20200502224844483.png)
对文件的获取位置尽心标识,上述条件语句为:当缓存命中时,输出“HIT from linux cache”,为命中输出“Miss from linux cache”
当主服务器内容更新时,除了在默认的时间内将缓存的内容 进行更新时,也可手动进行更新:
清除所有缓存:varnishadm ban req.url "-" /
清楚指定文件缓存:varnishadm ban req.url "-" /index.html
9、vcl_recv模块
当有多台主机时,为了实现不同访问时,对应不同主机地址
![](https://img-blog.csdnimg.cn/20200503090647155.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
分配结果:
![](https://img-blog.csdnimg.cn/20200503091125727.png)
上述访问可以用域名是因为做了本地解析:
192.168.1.100 www.linux.com bbs.linux.com
10、调用轮循模块
用法查看:man vmod_director
模块调用:
![](https://img-blog.csdnimg.cn/2020050309325711.png)
配置轮循:
![](https://img-blog.csdnimg.cn/20200503093838602.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
【说明】 return(pass):为了在每次查询后,清除缓存,使结果容易观察。
![](https://img-blog.csdnimg.cn/20200503095948649.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
图形界面访问:
图形界面访问,可以安装图形界面的软件包,进行推送(软件包可在小编博客上自行下载安装)。
因为该界面是通过网页进行访问的,所以在安装过程中需要通过PHP、APCAHE经行访问,需要注意的是我们在配置varnish的时候,设置访问端口为80,所以在配置Apache的访问端口时,需要修改其默认访问端口为:8080。
同时因为在清楚缓存是时,需要一定的权限,所以也应在varnish中配置相应的权限。配置如下:
![](https://img-blog.csdnimg.cn/2020050310464283.png)
![](https://img-blog.csdnimg.cn/20200503104806500.png)
界面推送:
![](https://img-blog.csdnimg.cn/20200503104928809.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMDU2MjI0,size_16,color_FFFFFF,t_70)
更多的varnish使用可直接调用man vcl 查看语法。
参考文章:百度百科