varnish的简单使用

varnish的简单使用

        • 安装
        • 配置
          • 配置启动参数文件
          • 配置环境信息文件
          • 配置varnish反向代理
        • 配置varnish
        • 启动varnish
        • 更加直观的查看varnish缓存
          • 手动清除缓存
          • 清除指定的缓存
        • varnish配置多后端
          • 配置多后端
          • 在本地配置域名解析
          • 查看测试结果
        • 负载均衡配置
          • 导入模块
          • 定义负载均衡调度器
          • 调用负载均衡
        • varnish推送平台配置
          • 通过图形化的方式简化缓存清理步骤
          • 部署

安装

varnish已被收录进EPEL源,故可直接利用EPEL源进行yum安装
yum install -y varnish
在这里插入图片描述


配置
配置启动参数文件

vim /usr/lib/systemd/system/varnish.service
在这里插入图片描述

限定该进程的最大句柄数,最大打开文件数

# Maximum number of open files (for ulimit -n)
LimitNOFILE=131072内存锁定,限制我们可以使用多大内存# Locked shared memory (for ulimit -l)
# Default log size is 82MB + header
LimitMEMLOCK=82000

通过命令查看到,当前的最大文件数为182462
在这里插入图片描述

满足varnish的131072,就不用改动了,如果小于varnish的最大句柄数,可以将varnish的最大句柄数,调整小一些,达到系统的要求即可

ulimit -l
查看可以锁定的物理内存的最大值为64M
在这里插入图片描述

将这里改成64000
在这里插入图片描述


配置环境信息文件

/etc/varnish/varnish.params

这里指定了varnish的配置文件

指定了varnish的默认监听端口
在这里插入图片描述
这里要做反向代理实验,我就把端口改成80


配置varnish反向代理

varnish是不提供服务的
这里配置一台后端服务器来提供服务
这里是配置好web服务

在这里插入图片描述

配置varnish

vim /etc/varnish/default.vcl
在这里插入图片描述

在这里插入图片描述

启动varnish

systemctl start varnish

查看varnish的进程

一个是root开启的,它会用来读取各项配置,监控子进程
一个是varnish开启的,真实处理用户请求的进程

在这里插入图片描述

访问varnish服务的地址,就可以看到varnish反向代理的后端服务的页面了

在这里插入图片描述


更加直观的查看varnish缓存

curl -I 192.168.xx.xx(varnish的IP地址)

查看详细信息,可以看到,是通过varnish来读取后端的数据的
这里的Age 表示缓存过期时间,默认120秒,120秒后就会将缓存清空,再次从后端获取新的数据
在这里插入图片描述

编辑varnish配置文件

vim /etc/varnish/default.vcl

接收语句块
在这里插入图片描述

传送语句块
在这里插入图片描述

如果,命中缓存的次数大于0,就返回一句话HIT from cache,
如果不是就返回MISS from cache
在这里插入图片描述

obj.hit :某个对象在缓存中命中的次数

然后重启varnish

systemctl restrat varnish

再次curl一下

curl -I 192.168.xx.xxx(varnish的IP地址)

可以看到第一次访问的时候,返回的是MISS from cache,

第一次访问的时候,CDN节点没有所请求的数据的话,需要向后端请求数据,顺便将数据缓存在CDN节点,然后返回给客户端。
在这里插入图片描述

当我们再次访问的时候,读取的就是varnish的缓存
命中缓存的次数大于0,就返回一句HIT from cache
在这里插入图片描述


手动清除缓存

清除所有的缓存(慎用)

varnishadm ban req.url "~" /

ban :表示清除req.url :表示客户端发送给varnish的请求报文中请求的url/:表示的是,网页默认发布目录里面的所有内容

清除完后,再次访问,就返回MISS
在这里插入图片描述

从第二次开始有变成命中缓存


清除指定的缓存

varnishadm ban req.url "~" /index.html

清除指定缓存后,再访问,Age并没有从0开始,而是持续下去了
在这里插入图片描述

访问指定的页面时候,Age才会从0开始
在这里插入图片描述

说明清除的只是index.html的缓存,并不是全部的缓存


varnish配置多后端

首先准备好两台web服务器

配置多后端

vim /etc/varnish/default.vcl
在这里插入图片描述

backend web1 {.host = "192.168.xx.xxx1";.port = "80";
}backend web2 {.host = "192.168.xx.xx2";.port = "80";
}sub vcl_recv {if (req.http.host ~ "^(www.?)web1.com") {set req.http.host = "www.web1.com";set req.backend_hint = web1;}elsif (req.http.host ~ "^www.web2.com") {set req.backend_hint = web2;}else {return (synth(405));}
}
在本地配置域名解析

把两台后端服务器的域名都解析到varnish

192.168.xx.xxx www.web1.com www.web2.com

然后varnish通过判断请求的域名,来决定请求的去向

查看测试结果

在这里插入图片描述

在这里插入图片描述


负载均衡配置
导入模块

4.0版本以后,定义负载均衡时候,需要导入一个模块

ls /usr/lib64/varnish/vmods/libvmod_directors.so
在这里插入图片描述

在varnish的配置文件中这个位置导入模块
在这里插入图片描述

定义负载均衡调度器

在这里插入图片描述
负载均衡器的名字叫lb
调用的算法是round_robin轮询算法

sub vcl_init {
new lb = directors.round_robin();
lb.add_backend(web1);
lb.add_backend(web2);}
调用负载均衡

在这里插入图片描述

定义在此处的意义是,当请求www.web1.com这个域名的时候,对后端两台服务器进行轮询访问
访问www.web2.com这个域名的时候,只访问web2这台服务器

sub vcl_recv {if (req.http.host ~ "^(www.?)web1.com") {set req.http.host = "www.web1.com";set req.backend_hint = lb.backend();
}
elsif (req.http.host ~ "^www.web2.com") {set req.backend_hint = web2;
}
else {return (synth(405));
}
}

当你重启varnish服务后,会发现访问web1时候,并没有出现轮询的效果,
因为它一直在访问缓存
为了达到测试的效果,此处先让它不缓存

在这里插入图片描述

然后重启varnish服务

再次测试,就可以实现轮询访问后端两台服务器了

在这里插入图片描述

在这里插入图片描述

一直访web2,它并不会发生变化
在这里插入图片描述


varnish推送平台配置
通过图形化的方式简化缓存清理步骤

谷歌开源

下载地址:https://code.google.com/archive/p/varnish-php-bansys/downloads

在这里插入图片描述

部署

yum install -y php httpd unzip

解压bansys.zip到Apache的默认发布目录,然后将内容都移到至发布目录

unzip bansys.zip -d /var/www/html/

在这里插入图片描述

编辑配置文件

vim config.php

定义主机列表

填写varnish的主机的地址

因为varnish占用了80端口,所以Apache的端口就改成8080

在这里插入图片描述

绑定刚才定义的主机列表
在这里插入图片描述

保存退出

修改Apache的端口为8080

vim /etc/httpd/conf/httpd.conf

在这里插入图片描述

启动Apache

systemctl start httpd

然后就可以看到平台了
在这里插入图片描述

编辑varnish配置文件,定义权限控制
在这里插入图片描述

vcl_recv中加入以下配置
在这里插入图片描述

重启varnish

systemctl restart varnish
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333458.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADS仿真 之 容差/良率分析

之所以要进行容差分析, 是因为任何电子元器件均存在一定的误差, 如电感、电容的精度等。 例如一个标称为2.0nH0.1nH的电感,代表的意思产品有99.74%的概率落在2.0nH0.1nH范围内, 即满足6σ ,σ是标准偏差或者说方差&…

Java虚拟机ART 读书笔记 第2章 深入理解Class文件格式

GitHub - Omooo/Android-Notes: ✨✨✨这有一包小鱼干,确定不要吃嘛?( 逃 深入理解Android:Java虚拟机ART 读书笔记 以下内容均来自书中内容 建议看原书哦 第2章 深入理解Class文件格式 2.1 class文件总览 Class文件格式全貌 u4&#xff…

苹果电脑交互式原型设计软件Axure RP 9 mac特色介绍

Axure RP 9 for Mac是一款交互式原型设计软件,使用axure rp9以最佳的方式展示您的作品,优化现代浏览器并为现代工作流程设计。同时确保您的解决方案正确完整地构建。Axure RP 9 for Mac为您整理笔记,将其分配给UI元素,并合并屏幕注…

2.SPSS数据文件的建立和管理

文章目录 数据文件的特点建立SPSS数据文件步骤 数据文件的结构变量的规则 数据的录入和保存录入数据保存文件 数据的编辑数据定位 数据文件的特点 SPSS数据库文件包括文件结构和数据两部分 SPSS数据文件中的一列数据称为一个变量。每个变量都应有一个名称,即&…

第二证券:股票私募仓位指数创近八周新高

1月8日,A股几大首要指数全线收跌,上证指数收于日内最低点2887.54点,间隔上一年5月份的阶段高点3418.95点现已跌去了15.54%。 不过,虽然商场仍未清晰止跌,私募基金们却现已进场“抄底”。私募排排网最新发布的私募仓位…

Android Matrix (二)具体图形变换参数的获取

Android Matrix (二)具体图形变换参数的获取 Matrix 类在 Android 中用于表示 3x3 的变换矩阵。这个矩阵可以应用于画布(Canvas),视图(View)或者位图(Bitmap)&#xff0…

软件测试|Linux基础教程:cp命令详解,复制文件或目录

简介 在Linux系统中,cp命令是一个非常常用且强大的命令,用于复制文件和目录。cp命令允许我们在不同目录之间复制文件或目录,并可以根据需求对文件复制的行为进行调整。在本文中,我们将详细解释cp命令的用法以及一些常见的选项。 …

C++常用库函数大小写转换

在我们在编写代码时大小写转换是基础知识,这篇博客将通过介绍C常用库函数来回顾和学习一种不一样的大小写转换 目录 一、islower/isupper函数二、tolower/toupper函数三、ASCLL码 一、islower/isupper函数 islower和isupper函数是C标准库中的字符分类函数&#xff…

python Android 安卓开发

kivy:https://github.com/kivy python-for-android :https://python-for-android.readthedocs.io/en/latest/ BeeWare:https://docs.beeware.org/en/latest/ Flet:https://github.com/flet-dev/flet 把 PySide6 移植到安卓上去&a…

7-4 计算长方体和四棱锥的表面积和体积 --笔记篇

题目 计算如下立体图形的表面积和体积。 从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。 编程要求: (1)在父类Rect中&#xff0c…

Unity中URP下使用屏幕坐标采样深度图

文章目录 前言一、Unity使用了ComputeScreenPos函数得到屏幕坐标1、 我们来看一下这个函数干了什么2、我们看一下该函数实现该结果的意义 二、在Shader中使用(法一)1、在Varying结构体中2、在顶点着色器中3、在片元着色器中 三、在Shader中使用&#xff…

linux 使用log4cpp记录项目日志

为什么要用log4cpp记录项目日志 在通常情况下,Linux/UNIX 每个程序在开始运行的时刻,都会打开 3 个已经打开的 stream. 分别用来输入,输出,打印错误信息。通常他们会被连接到用户终端。这 3 个句柄的类型为指向 FILE 的指针。可以…