架构师日记——VCL介绍和使用
来源:互联网 发布:淘宝店铺等级在哪儿看 编辑:程序博客网 时间:2024/06/06 15:13
VCL简介
- VCL(Varnish Configuration Language):Varnish配置语言,语法简单,功能强大,类似于c,perl。主要用来配置如何处理请求和内容的缓存策略。
- VCL在执行时会转换成二进制代码
- VCL文件被分为多个子程序,不同的子程序在不同的时间里执行,比如一个子程序在接到请求时执行,另一个子程序在接收到后端服务器传送的文件时执行
基本语法介绍
- 用花括号做界定符,使用分号表示声明结束。注释用//,#,/* */
- 赋值(=)、比较(==)、和一些布尔值(!、&&、||),!(取反)等类似c语法
- 支持正则表达式,ACL匹配使用~操作,如if(req.uri ~ “abc$”){…},表示请求的uri以abc结尾
- 不同于C的地方,反斜杠(\)在VCL没有特殊的含义。只是用来匹配URLs
- VCL没有用户定义的变量,只能给backend、request、document这些对象的变量赋值,大部分是手工输入的,而且给这些变量分配值的时候,必须有一个VCL兼容的单位
- VCL有if,但是没有循环
- 可以使用set来给request的header添加值,unset或remove来删除某个header
声明backend
可以配置多个后台ip和端口
backend abc{ .host = "127.0.0.1";//ip .port = "8080";//端口 .connect_timeout = 1s;//连接超时时间 .first_byte_timeout = 5s;//等待从backend传输过来的第一个字符的时间 .between_bytes_timeout = 2s;//两个字符的间隔时间 .max_connections=100;//最大连接数}backend jkl{ .host = "127.0.0.1"; .port = "9090";}
若只有一个那不需要声明导向哪个backend,配置了多个backend则需要,如
sub vci_recv{ if(req.request == "GET"){ req.backend=abc; }}
director
director是backend的逻辑分组或backend的集群。主要有随机、循环和DNS集中director,不同类型的director具有不同的算法来选择backend。比如随机的director示例如下:
director b2 random{//随机选 .retries = 5; { .bakend =abc;//已配置的backend .weigth = 7;//被选中的权重 } { .bakend =jkl; .weigth = 3; }}
指向director可以这样配置
set req.backend = b2;
随机的director又分成三种,分别是random、client、hash,他们采用同样的随机分发算法,只是种子数值不同,种子数分别采用随机数、客户端id或者是缓存的hash(典型的url)
1.client director
你可以通过设置VCL变量client.identity来区分客户端,值可以从session cookie或其他相似的值来获取
2.hash director
默认使用URL的hash值,可以通过req.hash获取到
3.round-robin director
它没有什么选项就是一次循环使用backend,第一个请求用第一个backend,第二个请求使用第二个,如此类推。
4.dns director
有两种不同的方法来选择后端,一种是random或者round-robin;另一种是使用.list(list的方式不支持ipv6):
director directorname dns{ .list = { .host_header="www.example.com"; .port="80"; .connection_timeout = 0.4; "192.168.15.0"/24; "192.168.16.128"/25; } .ttl = 5m; .suffix = "internal.example.net";}
这段代码会指定384个后端,都是用80端口及0.4s的连接超时,.list生命中设置选项必须在IPS的前面。.ttl定义DNSlookups的时间。
5.fallback director
选择第一个健康的backend,若先定义的backend没有down就选先定义的,实例:
director b3 fallback{ {.backend = www1;} {.backend = www2;} {.backend = www3;}}
probe(后端探针)
探测后端,确定他们是否健康,返回的状态用req.backend.healthy核对:
backend jkl{ .host = "127.0.0.1"; .port = "9090"; .probe = p1;}probe p1{ .url = "/test.jpg";//访问backend的路径,默认是"/" .timeout = 0.3s;//定义probe的过期时间,默认是2s .window = 8;//要检查后端服务器的次数,默认是8 .threshold = 3;//.windos里面要有多少polls成功就认为后端是健康的,默认是3 .initial = 3;//当varnish启动的时候,要确保多少个probe正常,默认是3 .internal = 6s;//probe多久检查一次后端,默认是5s .request = "GET / HTTP/1.1" "Host:www.abc.com"//设置详细的请求头,是一些字符串}
Acls
访问控制列表,示例如下
apl local{ "localhost"; "192.0.2.0"/24;//匹配主机名为192.0.2.0的主机 !"192.0.2.23";//不匹配ip为192.0.2.23的主机}
匹配示例:
if(client.ip ~ local){ ...}if(!client.ip ~ local){ ...}
阅读全文
0 0
- 架构师日记——VCL介绍和使用
- 架构师日记——Varnish的VCL子程序
- 架构师日记——VCL的变量和常用片段
- 架构师日记——MongoDB简介和安装使用
- Inside VCL(深入核心——VCL架构剖析) 》
- MySQL日记——索引的介绍和使用
- 架构师日记——Memcached的限制和使用建议
- 架构师日记——ActiveMQ使用场景和优化建议
- 架构师日记——使用CLI管理Varnish
- 架构师日记——Varnish简介和安装
- 架构师日记——Memcached简介和工作原理
- 《Inside VCL(深入核心——VCL架构剖析)》.李维 三
- 《Inside VCL(深入核心——VCL架构剖析)》.(李维) 一
- 架构师日记——Nginx简介
- 架构师日记——ActiveMQ简介
- Java并发编程日记——线程池介绍和使用建议
- 架构师日记——Nginx反向代理、动静分离和负载均衡
- 架构师日记——Varnish的Grace模式和Saint模式
- POJ
- c语言 int 型 无符号数 %u
- 使用put请求时不能获得前端的数据问题的解决
- 经典面试题之new和malloc的区别
- Java菜鸟成长之路__Day_5_Java_常用类_String
- 架构师日记——VCL介绍和使用
- saltstack-安装笔记(3)
- Qt 设置窗口图标和窗口文字
- 线程概念
- hdu 2045 不容易系列之(3)—— LELE的RPG难题
- MySQL学习
- 扩展欧几里得 以A/B HDU
- 桥接模式--继承并不一定总是最优
- C++学习笔记(七):this指针详解