1.描述:
VCL语言是一种被设计用来为varnish来定义请求处理和文档缓存策略的语言。
当配置文件加载时,varnishd会把VCL代码转换为C代码,再将C语言编译为共享对象,然后将它们动态链接进服务进程。
2.VCL语法非常简单,类似于C和Perl。不同的代码块使用大括号分割,每个语句以分号结束,注释的话则可以写成C,C++,或Perl语言的形式。
2.1. 赋值运算符是=,
2.2. 比较运算符是==,!=,
2.3. 布尔运算符是!,&&,||。
2.4. 同时VCL也支持正则表达式和ACL匹配操作符~,!~。
2.5. 字符串使用双引号“...”,但不包括新行。
2.6. 要是想包含新行则需要在双引号外面再加上大括号,如{“...”}。
2.7.反斜杠\字符没有任何的含义,可以随意的使用
2.8. 多个字符串要连接在一起,使用加号+
赋值运算符使用set关键字声明。用户不能自定义变量。被赋值的变量必须隶属于后端服务器、请求或者文档对象。
你可以使用set关键字来任意设置HTTP头部信息。你也可以使用remove或unset关键字来删除头部信息。
你可以使用rollback关键字来恢复你任意时间对req所做的任意改变。
这synthetic关键字则被用来在vcl_error子程序中产生一个合并的相应体。它以一个单一的字符串来作为参数。
你可以使用panic关键字来强制使client进程崩溃。panic也是以一个字符串作为参数。
return(action)关键字用来结束子程序。其中,action可是:
deliver
error
fetch
hash
hit_for_pass
lookup
ok
pass
pipe
restart
其中的任何一个。
其他的VCL文件中的内容,可以使用include关键字来包含进来。
3. 后端服务器的声明
3.1. 使用一个名为backend的对象来声明后端服务器。例如:
backend www {
.host = "www.example.com";
.port = "http";
}
3.2. backend对象常被用来在请求发来时,如何选择后端服务器。例如:
if (req.http.host ~ "(?i)(www.)?example.com$") {
set req.backend = www;
}
3.3. 为了避免后台服务器超载,.max_connections 参数可以用来限制并发连接的数量。
3.4. 一些超时的设置参数可以放在后端服务器的声明中。超时参数 .connect_timeout表示等待连接后端服务器的时间;.fist_byte_timeout表示等待来自后端服务器的首字节到达的时间;.between_bytes_timeout表示前一个字节到达后,等待下一个字节所用的时间。以上这些参数都可以设置在后端服务器的声明之中,例如:
backend www {
.host = "www.example.com";
.port = "http";
.connect_timeout = 1s;
.first_byte_timeout = 5s;
.between_bytes_timeout = 2s;
}
当所有的条目被添加到saintmode模式列表后,就会将后端服务器标记为不可用。参数 .saintmode_threshold 可以把saintmode列表设置为最大。如果设置为0,就表示对于那个后端服务器来说,就完全禁用了saint模式。如果在后端服务器的声明中,设置了此参数,那么就以声明中的参数为准。
4. Directors
一个director是为了冗余的目的(说白了,就是实现高可用),将多个后端服务器聚合在一起而形成的一个逻辑组。和LVS中的director的含义差不多。
director分好几种类型。不同的类型使用不同的算法来选择使用哪台后端服务器。
director的配置,可以按如下方式:
director b2 random {
.retries = 5;
{
// 直接引用之前声明的backend对象的名称,如b1。
.backend = b1;
.weight = 7;
}
{
// 或者是直接在参数 .backend后面声明
.backend = {
.host = "fs2";
}
.weight = 3;
}
}
VCL手册 PDF 下载:
具体下载目录在 /2014年资料/3月/11日/VCL手册 PDF