Varnish Configuration Language - VCL (varnish 配置 语言-VCL)
来源:互联网 发布:java 泛型类 class 编辑:程序博客网 时间:2024/04/28 02:58
Varnish Configuration Language - VCL (varnish 配置 语言-VCL)
官方手册:https://www.varnish-cache.org/docs/3.0/tutorial/vcl.html
Varnish 有一个很棒的配置系统,大部分其他的系统使用配置指令,让您打开或者关闭一些开关。 Varnish使用区域配置语言,这种语言叫做“VCL”(varnish configuration language),在执行vcl时,varnish 就把VCL转换成二进制代码。
VCL 文件被分为多个子程序,不同的子程序在不同的时间里执行,比如一个子程序在接到请求时执行,另一个子程序在接收到后端服务器传送的文件时执行。
varnish 将在不同阶段执行它的子程序代码,因为它的代码是一行一行执行的,不存在优先级问题。随时可以调用这个子程序中的功能并且当他执行完成后就退出。
如果到最后您也没有调用您的子进程中的功能,varnish 将执行一些内建的 VCL代码,这些代码就是default.vcl 中被注释的代码.
99%的几率您需要改变vcl_recv 和 vcl_fetch 这两个子进程。
vcl_recv
vcl_recv(当然,我们在字符集上有点不足,应为它是unix)在请求的开始被调用,在接收、解析后,决定是否响应请求,怎么响应,使用哪个后台服务器。在vcl_recv中,您可以修改请求,比如您可以修改cookies,添加或者删除请求的头信息。
注意vcl_recv中只有请求的目标,req is available。
vcl_fetch
vcl_fetch 在一个文件成功从后台获取后被调用,通常他的任务就是改变 response headers,触发ESI进程,在请求失败的时候轮询其他服务器。
在 vcl_fetch 中一样的包含请求的 object,req,available,他们通常是 backend response,beresp。beresp 将会包含后端服务器的HTTP 的头信息
actions
主要有以下动作
pass \\当一个请求被pass后,这个请求将通过varnish转发到后端服务器,但是它不会被缓存。pass可以放在vcl_recv 和 vcl_fetch中。
lookup \\当一个请求在vcl_recv中被lookup后,varnish将从缓存中提取数据,如果缓存中没有数据,将被设置为pass,不能在 vcl_fetch中设置lookup。
pipe \\pipe和 pass相似,都要访问后端服务器,不过当进入pipe 模式后,在此连接未关闭前,后续的所有请求都发到后端服务器(这句是我自己理解后简化的,有能力的朋友可以看看官方文档,给我提修改建议) 。
deliver \\请求的目标被缓存,然后发送给客户端
esi \\ESI-process the fetched document(我理解的就是vcl 中包换一段 html代码)
Requests,Responses and objects
在VCL 中,有3 个重要的数据结构
request 从客户端进来
responses 从后端服务器过来
object 存储在cache 中
在VCL 中,你需要知道以下结构
req \\请求目标,当 varnish 接收到一个请求,这时 req object 就被创建了,你在vcl_recv中的大部分工作,都是在 req object上展开的。
beresp \\后端服务器返回的目标,它包含返回的头信息,你在vcl_fetch中的大部分工作都是在beresp object上开展的。
obj \\被 cache 的目标,只读的目标被保存于内存中,obj.ttl 的值可修改,其他的只能读。
Operaors
VCL 支持以下运算符,请阅读下面的例子:
= \\赋值运算符
== \\对比
~ \\匹配,在ACL中和正则表达式中都可以用
! \\否定
&& \\逻辑与
|| \\逻辑或
=======================================================
EXAMPLE 1 – manipulation headers
我们想要取消我们服务器上/images目录下的所有缓存:
sub vcl_recv {if (req.url ~ "^/images") {unset req.http.cookie;}}
现在,当这个请求在操作后端服务器时,将不会有 cookie 头,这里有趣的行是if-statement,它匹配URL,如果匹配这个操作,那么头信息中的cookie就会被删除。
EXAMPLE 2 – manipulation beresp
从后端服务器返回对象的值满足一些标准,我们就修改它的TTL 值:
sub vcl_fetch { if (beresp.url ~ "\.(png|gif|jpg)$") { unset beresp.http.set-cookie; beresp.ttl = 3600; }}
EXAMPLE3-ACLs
你创建一个VCL关键字的访问控制列表。你可以配置客户端的IP地址
# Who is allowed to purge.... acl local { "localhost"; "192.168.1.0"/24; /* and everyone on the local network */ ! "192.168.1.23"; /* except for the dialin router */ } sub vcl_recv { if (req.request == "PURGE") { if (client.ip ~ local) { return(lookup); } } } sub vcl_hit { if (req.request == "PURGE") { 12 set obj.ttl = 0s; error 200 "Purged."; } } sub vcl_miss { if (req.request == "PURGE") { error 404 "Not in cache."; } }
摘自:Varnish权威指南-中文版:http://docs.haohtml.com/download/cdn/Varnish%c8%a8%cd%fe%d6%b8%c4%cf-%d6%d0%ce%c4%b0%e6.pdf
- Varnish Configuration Language - VCL (varnish 配置 语言-VCL)
- Varnish Configuration Language - VCL(varnish配置语言-VCL)
- Varnish Configuration Language - VCL(varnish配置语言-VCL)
- varnish 配置语言 VCL
- Varnish的配置语言VCL及其内置变量介绍
- varnish VCL流程图
- varnish配置文件VCL详解
- varnish---vcl语法
- varnish vcl man 文档翻译
- varnish vcl man 文档翻译
- varnish 的配置文件详细解析(VCL详解)
- Varnish配置文件VCL中的函数详解
- 有关Varnish对话和VCL精华样本
- Varnish configuration
- 架构师日记——Varnish的VCL子程序
- Varnish+Nginx 配置----Varnish
- varnish配置
- Varnish配置
- 西安交通大学电子图书站点被黑
- 智能手机移动应用的8个趋势
- C++技巧之operator操作符
- 笔试题及现实生活问题汇总
- Struts2配置文件讲解
- Varnish Configuration Language - VCL (varnish 配置 语言-VCL)
- bash之read命令
- 获得document的iframe时有两种方法
- 配置Validator框架
- 快改密码!Struts2漏洞引爆网站“泄密门”
- 关于私钥加密、公钥加密、签名在生活中的场景
- android在桌面弹出一个窗口
- 关于开源授权协议 GPL 和 LGPL
- adb 终端实时打印cpu资源消