vcl:

  state engine:各引擎之间存一定程度上的相关性;前一个engine如果可以有多种下游engine,则上游engine需要用return指明

要转移的下游engine  

vcl_recv
vcl_hash
vcl_hit
vcl_miss
vcl_fetch
vcl_deliver
vcl_pipe
vcl_pass
vcl_error

  编程语言语法:

  (1)//, #, /* */ 用于注释;会被编译器忽略

  (2) sub $name: 用于定义子例程

  例如:sub vcl_recv {

      }

  (3) 不支持循环操作

  (4) 有众多内置的变量,变量的可调用位置与state engine有密切相关性

  (5) 支持终止语句,return(action);但没有返回值

  (6) 整个语言只对一个“域”有效,叫做“域”专用

  (7) 操作符:=, ==, ~, !, &&, ||

条件判断语句:

  if (CONDITION) {

  } else {

  }

变量赋值:set name=value    unset name

req.http.HEADER:调用request报文中http协议的指定的HEADER首部

    例如:req.http.X-Forwarded-For     req.http.Auhtorization      req.http.cookie

req.request: 请求方法

state engine workflow(v3):

  vcl_recv --> vcl_hash --> vcl_hit --> vcl_deliver

  vcl_recv --> vcl_hash --> vcl_miss --> vcl_fetch --> vcl_deliver

  vcl_recv --> vcl_pass --> vcl_fetch --> vcl_deliver

  vcl_recv --> vcl_pipe

定义配置文件,先复制一份,cp /etc/varnish/default.vcl /etc/varnish/test.vcl

vim /etc/varnish/test.vcl  在sub vcl_deliver engine下添加如下配置

obj.hits(内置变量):此请求对象从缓存中命中的次数

上面的命令是如果命中了则添加X-Cache = "HIT"首部,没命中则添加X-Cahce = "MISS"首部

varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082  登陆varnish

编译加载新的配置文件:

在客户端对varnish访问

命中!

varnish中的内置变量:
  变量种类:
  client
  server
  req
  resp
  bereq
  beresp
  obj
  storage

bereq.http.HEADERS: 由varnish发往backend server的请求报文的指定首部

bereq.request:请求方法

bereq.backend:指明要调用的后端主机

beresp.status:后端服务器的响应的状态码

beresp.http.HEADER: 从backend server响应的报文的首部

beresp.ttl:后端服务器响应的内容的余下的生存时长

obj.ttl: 对象的ttl值

obj.hits:此对象从缓存中命中的次数

vim /etc/varnish/test.vcl    加一个变量

在浏览器调试界面中已经能看到varnish自己的ip地址添加上去了

在varnish4版本中sub vcl_recv engine中默认内置了如下规则

sub vcl_recv {
if (req.method == "PRI") {
/* We do not support SPDY or HTTP/2.0 */
return (synth(405));
}

if (req.method != "GET" &&
req.method != "HEAD" &&
req.method != "PUT" &&
req.method != "POST" &&
req.method != "TRACE" &&
req.method != "OPTIONS" &&
req.method != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}

if (req.method != "GET" && req.method != "HEAD") {
/* We only deal with GET and HEAD by default */
return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
return (hash);
}

varnish状态引擎1的更多相关文章

  1. WEB缓存系统之varnish状态引擎

    前文我们聊了下varnish的VCL配置以及语法特点,怎样去编译加载varnish的vcl配置,以及命令行管理工具varnishadm怎么去连接varnish管理接口进行管理varnish,回顾请参考 ...

  2. varnish状态引擎2

    如何让varnish支持虚拟主机: if (req.http.host = "www.nihao.com") { } 强制对某资源的请求,不检查缓存: 上图表示以/test1.ht ...

  3. varnish 相关说明

    一.关于Varnish Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能 ...

  4. Vanish 详解

    1.varnish 概述:     varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp FreeBSD 核心的开发人员之一.varnish采 ...

  5. WEB缓存系统之varnish代理以及健康状态检测配置

    前文我们聊了下varnish的缓存项修剪配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12666406.html:今天我来说一下varnish作为代理服务 ...

  6. 学习varnish随笔

    Varnish是一款高性能.开源的反向代理服务器和缓存服务器.Varnish使用内存缓存文件来减少响应时间和网络带宽消耗.这个项目是由挪威的一家报纸Verdens Gang的网络分支起始的,其架构设计 ...

  7. varnish

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  8. Varnish缓存服务

    Varnish缓存服务详解及应用实现   1.varnish的基本介绍   Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已 ...

  9. Varnish缓存服务详解及应用实现

    1.varnish的基本介绍    Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多.在1975年时,储存媒介只有 ...

随机推荐

  1. sql server 根据执行计划查询耗时操作

    with QS as( select cp.objtype as object_type, /*类型*/ db_name(st.dbid) as [database], /*数据库*/ object_ ...

  2. AndroidManifest.xml 屏幕上下反转

    通常我们的应用只会设计成横屏或者竖屏,锁定横屏或竖屏的方法是在AndroidManifest.xml 文件中设定属性android:screenOrientation为"landscape& ...

  3. codeforce--Vasya and Petya's Game

    网址:http://codeforces.com/contest/576/problem/A A. Vasya and Petya's Game time limit per test 1 secon ...

  4. Storm实时计算框架的编程模式

    storm分布式流式计算框架. nimbus:主进程服务(职责就是任务的分配的,程序的分发) supervisor:工作进程服务(职责就是启动线程池,接受任务,运行任务,报告任务的运行状态) 注意容错 ...

  5. Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)

    在之前的文章(http://space.itpub.net/17203031/viewspace-774843)中,笔者介绍了如何在Linux 2.6内核中配置HugePage以及AMM与其的不兼容性 ...

  6. MFC获取文本框字符串

    //方法1:使用用GetDlgItem,得到控件对像, 再GetWindowText //GetDlgItem(IDC_EDIT1)->GetWindowText() //方法2:控件与对应类关 ...

  7. c/c++笔记

    string 若要根据字典序比较string类型的大小,只需要用><=就可以啦 例如: string s1="abcz"; string s2="abcd&q ...

  8. python学习笔记(递归函数)

    博主看了看递归.说的简单点就是程序里面再调用程序本身,或者是方法里面再调研方法本身.或者是函数里面再调研函数本身 用于什么场景呢,博主这里是父子节点排序,父子节点的查询 直接上代码: #!/usr/b ...

  9. 一步一步学习Unity3d学习笔记系1.2 单机游戏和网游的数据验证概念

    这一次的笔记的主要内容是单机和网游的数据存储,数据验证方式,在游戏的时候除了控制角色的行动,还涉及到用户角色的升级,经验,金钱赚取,道具购买,技能升级 等等一些数据的交易, 那么单机游戏和网游的区别如 ...

  10. PMP考试--三点估计法

    如果你对项目管理.系统架构有兴趣,请加微信订阅号“softjg”,加入这个PM.架构师的大家庭 把施工时间划分为乐观时间.最可能时间.悲观时间 乐观时间:也就是工作顺利情况下的时间为a 最可能时间:最 ...