Varnish详解

Varnish cache,或称Varnish,是一套高效能的反向代理,缓存器(reverseproxy server)。

  • varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。
  • 安装varnish,管网下载rpm包,varnish-3.0.5-1.el6.x86_64.rpm  varnish-docs-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm这三个包都下载下来安装
# yum -y install *.rpm
  • 安装完成后,可以查看下各安装包所生成的文件
# rpm -ql varnish
  • 查看帮助文档用
#  man varnishd
  • varnish的配置文件
#vim /etc/varnish/default.vcl
  • Varnish的启动脚本位于/etc/rc.d/init.d/varnish,里面的参数是由/etc/sysconfig/varnish来定义的。
  • # service varnish     start    
    启动
    varnish
  • # ss -tnlp      查看80,6082端口是否已被监听
  • VCL状态引擎,用于让管理员定义缓存策略,vcl中有很多内置函数可用来实现字符串的修改

编辑配置文件,要想是修改的内容永久有效,修改default.vcl配置文件,但我们这里为了演示手动修改并启用配置文件,重新cp了配置文件,并加载新定义的配置文件

#  cp /etc/varnish/default.vcl/etc/varnish/text.vcl
#  vim /etc/varnish/text.vcl

用varnishadm接口手动是配置文件生效

# varnishadm -h  查看varnishadm的用法
# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

用help可查看所有命令

help[command]
ping[timestamp]
authresponse
quit
banner
status
start
stop
vcl.load <configname><filename>
vcl.inline<configname> <quoted_VCLstring>
vcl.use <configname>
vcl.discard<configname>
vcl.list
vcl.show<configname>
param.show[-l] [<param>]
param.set<param> <value>
panic.show
panic.clear
storage.list
backend.list
backend.set_healthmatcher state
ban.url<regexp>
ban<field> <operator> <arg> [&& <field><oper> <arg>]...
ban.list
varnish> vcl.list    查看列表
200       
active          0 boot
available       0 text
 
varnish> vcl.load text1 text.vcl   编译配置文件
200       
VCLcompiled.
 
varnish> vcl.use text1  
200

下面以例子来演示vcl的各种语法和各内置函数的使用方法

# vim /etc/varnish/text.vcl   加入如下行

subvcl_deliver {

if (obj.hits > 0) {

set resp.http.X-Cache = "HIT";         如果是首次访问该页面,此时无缓存,显示MISS,以后再访问时会被缓存命中,显示HIT

} else {

set resp.http.X-Cache ="MISS";

}

}

保存,退出

在varnishadm命令接口重新载入编译配置文件

varnish> vcl.load text2 text.vcl

varnish> vcl.use text2

在浏览器输入varnish所在主机的IP,这里是172.16.17.3,打开主页面后,打开开发者工具查看

首次访问MISS

Server:Apache/2.2.15 (CentOS)
Via:1.1 varnish
X-Cache:MISS
X-Varnish:2013467702

再次强制刷新HIT

Server:Apache/2.2.15 (CentOS)
Via:1.1 varnish
X-Cache:HIT
X-Varnish:2013467704 2013467703

sub vcl_recv {                               指定某个网页不缓存

if (req.url ~"^/test.html$") {

return(pass);

}

}

sub vcl_fetch {            定义缓存时长

if (req.request == "GET"&& req.url ~ "\.(html|jpg|jpeg)$") {

set beresp.ttl = 3600s;

}

}

对后端主机的健康状态检测

# vim /etc/varnish/text.vcl

在backend default  {     中加入

.probe= {
        .url = "/index.html";
       .interval = 3s;      探测请求的发送周期,默认为5秒
       .window = 5;      探测次数,默认是8
       .threshold = 2;     至少探测判断几次认为其状态健康,默认是3
         }
 
 
varnish> backend.list  查看后端主机的信息健康状态
200       
Backendname                   Refs   Admin     Probe
default(172.16.17.12,,80)      12    probe      Healthy 5/5

Varnish中可以使用director指令将一个或多个近似的后端主机定义为一个逻辑组

#  vim/etc/varnish/text.vcl
backendweb1 {
  .host = "172.16.17.12";
  .port = "80";
  .probe = {
        .url = "/index.html";
        .interval = 2s;
        .window = 6;
        .threshold = 2;
         }
}
backendweb2 {
  .host = "172.16.17.11";
  .port = "80";
  .probe = {
        .url = "/index.html";
        .interval = 2s;
        .window = 6;
        .threshold = 2;
         }
}
directorwebservers round-robin {
   { .backend = web1; }
   { .backend = web2; }
}
 
acl  purgers {
        "127.0.0.1";
        "172.16.0.0"/16;
}
 
subvcl_recv {
     set req.backend = webservers;
     if (req.restarts == 0) {
        if (req.http.x-forwarded-for) {
            set req.http.X-Forwarded-For =
                req.http.X-Forwarded-For +", " + client.ip;
        } else {
            set req.http.X-Forwarded-For =client.ip;
        }
     }
      if (req.url ~ "^/test.html$") {
          return(pass);
        }
 
 
           if (req.request =="PURGE") {
                if (client.ip !~ purgers) {
                        error 405 "Methodnot allowed";
                }
                return (lookup);
        }
 
    
     return (pass);
}
 
subvcl_hit {
         if (req.request == "PURGE"){
                purge;
                error 200 "Purged";
        }
      return (deliver);
 }
 
 
 sub vcl_miss {
         if (req.request == "PURGEE"){
                purge;
                error 404 "Not incache";
        }
      return (fetch);
 }
 
subvcl_deliver {
                        if (obj.hits > 0) {
                                setresp.http.X-Cache = "HIT via" + " " + server.hostname;
                        } else {
                                setresp.http.X-Cache = "MISS via" + " " + server.hostname;
                        }
        return (deliver);
                }

时间: 2024-07-31 14:33:48

Varnish详解的相关文章

varnish详解与实际应用案例

varnish是一款高性能且开源的反向代理服务器和Http加速器,开发者Poulhenning Kamp,其也是FreeBSD核心的开发人员之一,比较有名的应用安全当数,挪威最大的在线报纸Verdens Gang(vg.no)使用3台varnish代替了原有的12台squid,而且性能比以前更好,(思密达,google时都有此说明)可以运行于多种平台,如FreeBSD6.0,7.0 Solaris和Linux 2.6内核及以上版本的运行一.原理概念介绍 1.varnish系统架构    varn

Varnish详解与实战

一.简介: Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有稳定,且效率更高,资源占用更少等优点. Varnish的官网为https://www.varnish-cache.org,rpm,rpm包的下载位置为:http://repo.varnish-cache.org. 二.varnish结构特点: 1.varnish结构 三大部分,客户端,varnish处理,varni

varnish详解及安装

Varnish 简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来. 挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 V

varnish安装及配置详解

varnish系统架构: varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程). Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程. Child进程包含多种类型的线程,常见的如:Acceptor线程:接收新的连接

36 web系统架构及cache基础、varnish4基础应用、varnish状态引擎详解及vcl

02 varnish4基础应用 配置环境: node1 CentOS7.2 192.168.1.131 [[email protected] ~]# yum -y install varnish [[email protected] ~]# vim /etc/varnish/varnish.params 修改 VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G" 为 VARNISH_STORAGE="ma

36补 varnish程序解雇及配置初步、vcl使用详解及varnish命令行工具

01 varnish程序结构及配置初步 配置环境 node1: CentOS 6.7 192.168.1.121 [[email protected] ~]# yum -y install httpd [[email protected] ~]# service httpd start [[email protected] ~]# echo "<h1>Web1</h1>" > /var/www/html/index.html [[email protect

varnish基础概念详解

varnish基础概念详解 比起squid更加轻量级,大致有以下几个特点: ·可以基于内存缓存,也可以在磁盘上缓存,但是就算存放在磁盘上,也不能实现持久缓存 只要进程崩溃,此前缓存统统失效,无论是在内存还是在磁盘,但是现在已经具备持久缓存功能,但是仍然在实验阶段,经常容易崩溃,而且最大大小不能超过1G 如果期望内存大小超过几十个G,比如图片服务器,纯粹使用内存,性能未必好,这时候可以使用磁盘进行缓存,或SSD X 2 做RAID 避免磁盘损坏,在实现随机访问上 ssd硬盘要比机械硬盘要好的多,如

缓存varnish的管理及配置详解

一 工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server.严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器.同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方

Varnish 3.X详解

一.varnish定义 Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程.master进程读入命令,进行一些初始化,然后fork并监控child进程.child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程. 在网站并发量过大时:无法通过向上或向外扩展来解决时:必须引入缓存来减小服务器的压力:而互联网在传输过程中三个关键点:客户端入口.传输中间路由.服务器端出口:相对于响应报文缓存可以解决