Varnish简介

Varnish介绍:

  Varnish是一个反向HTTP代理,有时也被称为HTTP的加速器或网络加速器;它存在于真实服务器的前面(可能有多级代理),将来自于客户端的请求中的部分内容存储在自身的内存中,以减少服务器响应时间和网络带宽消耗。与Varnish类似的开源解决方案还有squid.

  Varnish不仅仅是一个通过缓存数据加速服务的反向代理,根据其安装和配置,也可用来:

  • web application firewall,
  • DDoS attack defender,抵御DDos攻击
  • hotlinking protector,链保护
  • load balancer,
  • integration point, 集成点
  • single sign-on gateway,单点登录网关
  • authentication and authorization policy mechanism,认证授权策略机制
  • quick fix for unstable backends, 不稳定后台的快速修复
  • HTTP router.

Manager Process:

  Manager Process是主模块,包含了Varnish的一些二进制程序。管理器进程的任务是将任务(包括缓存)委托给子进程。管理程序确保每个任务总是有一个进程。

  Manager Process的CLI(命令行接口)可通过两种方式进行管理:

    ①varnishadm:一个基于列表的管理命令程序,其与varnishd守护进程相连接。

    ②VAC-->vagent2:VAC(Varnish Administration Console)包括一个GUI和API,VAC是生产环境中最常用的实时图和统计数据工具,帮助确定Varnish缓存服务器的瓶颈和问题。VAC是一种varnish的缓存服务器组的管理控制台,也被称为高速缓存组。

缓存组是具有相同配置的varnish缓存服务器的集合。

Cacher Process:

  • listen to client requests
  • manage worker threads
  • store caches
  • log traffic
  • update counters for statistics 更新统计计数器

Shared Memory Log: 

  varnish通过可以基于文件系统接口进行访问的共享内存区域来记录日志(shared memory log);默认是90MB;分为两部分:

    前半部分是计数器;后半部分是客户端请求的数据;

要向使用Varnish,必须要配置好Varnish,而配置其前提是要先了解VCL(Varnish Configuration Language)。

VCL:是一种特殊的域语言用来描述Varnish缓存的请求处理和文件缓存策略的。

When a new configuration is loaded, the VCC process, created by the Manager process, translates the VCL code to C. This C code is compiled typically by gcc to a shared object. The shared object is then loaded into the cacher process.

  当一个新的配置项被装载时,由管理进程创建出一个VCC进程,将VCL编译成C代码;之后C代码又被gcc编译器根据类型解释成一个共享对象,此对象接下来会被装入缓存进程中。

  然而,VCL的工作流程被看作一个有限状态机

Varnish Finite State Machine

  vcl_recv

  vcl_hash:

    vcl_hit

    vcl_miss

    vcl_purge

    vcl_pipe

    vcl_pass:

      pass

      hit_for_pass

  vcl_backend_fetch

  vcl_backend_response

  vcl_backend_error

  vcl_deliver

  vcl_synth

vcl的语法:
            (1)//,#,/*...*/:注释
            (2)sub $name:定义子例程
            (3)不支持循环,但支持条件判断
            (4)有内建变量
            (5)使用终止语句return,没有返回值
            (6)操作符:=,==,!=,~,&&,||



应用实例: 

/*测试缓存命中与否*/
sub vcl_deliver{
    if(obj.hits>0){
    set resp.http.X-cache = "HIT via" + " " + server.ip;
    }
    else{
        set resp.http.X-cache = "MISS via" + " " + server.ip;
    }
}
/*强制对某些资源的请求不检查缓存*/
sub vcl_resv{
    if(req.url ~ "(?i)^/login" || req.url ~ "(?i)^/admin"){
    return(pass);
    }
}
/*对特定类型的资源,如公开的图片等,取消其私有标识,并强行设定其可以由varnish缓存的时长;*/
sub vcl_backend_response{
    if(beresp.http.cache-control !~ "s-maxage"){
        if(beresp.url ~ "(?i)\.jpg$"){
        set beresp.ttl = 7200s;
        unset beresp.http.Set-Cookie;
      }
    if(bereps.url ~ "(?i)\.css"){
        set bereps.ttl = 3600;
        unset beresp.http.Set-Cookie;
      }
    }
}    

设置多个后端主机:

backend default{
    .host = "172.18.100.67";
    .port = "80";
}
backend appsrv{
    .host = "172.18.100.68";
    .port = "80";
}
sub vcl_recv{
    if(req.url ~ "(?i)\.php$"){
    set req.backend_hint = appsrv;
    }
    else{
    set req.backend_hint = default;
    }
}

缓存的负载均衡实现:

/*在default.vcl中写入:*/
import directors;

backend websrv1{
    .host = "192.168.1.101";
    .port = "80";
}

backend websrv2{
    .host = "192.168.1.102";
    .port = "80";
}

sub vcl_init{
    new websrvs = directors.round_robin();
    websrvs.add_backend(websrv1);
    websrvs.add_backend(websrv2);
}

sub vcl_recv{
    set req.backend_hint = websrvs.backend();
}

对后端主机做健康检测:

backend websrv1 {
    .host = "192.168.1.101";
    .port = "80";
    .probe = {
    .url = "/";
    .interval = 1s;
    .window = 8;     //表示最近检测的次数
    .threshold = 5;   //最近检测的次数中成功的次数
    .timeout = 2s;   //探测时的超时时长
    }
}
时间: 2024-05-30 12:56:23

Varnish简介的相关文章

WEB缓存控制机制与varnish简介

在说到缓存varnish前,我们首先来了解下对于web服务缓存到底是什么?它有哪些特点,基础原理是什么? http是web应用协议,通常我们说的一次http事务,不外乎就是客户端请求,服务端响应,通常我们是这样去理解http一次事务的过程:其实对于web服务器来说,一个客户端访问服务端的某资源时,往往客户端的请求没有到达真正提供web服务的服务器上,就被响应了,这是为什么呢?我们知道一个WEB站点在提供对外访问的页面上在一定时间内都不会发生变化,而对于这些不经常变化的资源,访问又特别大的情况,如

Varnish缓存代理简介与配置

一.varnish原理: 1)Varnish简介: varnish缓存是web应用加速器,同时也作为http反向缓存代理.你可以安装varnish在任何http的前端,同时配置它缓存内容.与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点.有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一. 根据官网的介绍,Varnish的主要特性如下:http

Varnish实现Web缓存

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

Linux之varnish

一:varnish简介 Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好 Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多.在1975年时,储存媒介只有两种:内存与硬盘.但现在计算机系统的内存除了主存外,还包括了CPU内的L1.L2,甚至有L3快取.硬盘上也有自己的快取装置,因此Squid Cache

varnish的缓存加速,以及动静分离,负载均衡

一个简单的拓扑如上,varnish1 上还同时开了nginx,用来做静态的http,app1和app2 是nginx+fastcgi,这个拓扑主要做的是Discuz!论坛的动静分离,以及app的负载均衡,varnish起到个反向代理和缓存加速的功能. varnish1:192.168.1.151,172.16.0.51 app1:172.16.0.52 app3:172.16.0.54 varnish 简介 varnish的缓存方式: 1.malloc,通过malloc获取内存,简单,速度. 2

缓存服务器varnish概念篇

一.Varnish 简介 Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多.在1975年时,储存媒介只有两种:内存与硬盘.但现在计算机系统的内存除了主存外,还包括了CPU内的L1.L2,甚至有L3快取.硬盘上也有自己的快取装置,因此Squid Cac

varnish 4.0 缓存代理配置

一.varnish原理: 1)Varnish简介: varnish缓存是web应用加速器,同时也作为http反向缓存代理.你可以安装varnish在任何http的前端,同时配置它缓存内容.与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点.有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一. 根据官网的介绍,Varnish的主要特性如下:http

varnish学习笔记

目录 Varnish简介及特点 Varnish日志 Varnish系统结构 Varnish所支持的算法 VCL介绍 Varnish后端存储 Varnish实战 Varnish简介及特点 Varnish是一款高性能且开源的反向代理服务器和HTTP缓存加速器:在1975年时,储存媒介只有两种:内存与硬盘.但现在计算机系统的内存除了主存外,还包括了CPU内的L1.L2,甚至有L3快取.硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可

Linux集群之varnish应用

一.varnish简介 varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件设置体系机构,和现的的硬件体系紧密配合,与传递的squid相比,varnish相比,varnish具有性能更高.速度更快.管理更加方便等诸多优点. 二. varnish软件体系架构 varnish主要运行两个进程:Management进程和Child进程. Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Manage