您的位置:首页 > 其它

VCL 中文man page(1)

2016-03-11 15:33 274 查看
三、Varnish参考手册

●VCL(varnish configuration language)
Author: Dag-Erling Smørgrav
Author: Poul-Henning Kamp
Author: Kristian Lyngstøl
Author: Per Buer

DESCRIPTION描述
VCL语言是varnish (HTTP加速器)的一种限定域语言,目的在于规定请求的处理和内容的缓存策略。
当一个新的配置文件被加载,varnish管理进程把vcl转换成c代码,然后编译成动态共享库连接到服务器进程。
SYNTAX语法
VCL的语法相当简单,和c,perl相似。使用花括号做界定符,使用分号表示声明结束。注释和C、C++、perl语法一样,你可以自己选择。
除此之外还类似c语法,比如赋值(=)、比较(==)、和一些布尔值(!、&&、||),VCL支持正则表达式,ACL匹配使用 ~ 操作。
不同于C和perl的地方,反斜杠(\)在VCL中没有特殊的含义。只是用来匹配URLs,所以没有反斜线,请大家自由使用正则表达式。
把所有的字符串都连接在一起,并不对他们做任何操作。
分配和介绍设置关键字,VCL没有用户定义的变量,只能给backend、请求、内容这些目标的变量赋值,这些内容大部分是手工输入得,而且给这些变量分配值的时候,必须有一个VCL兼容的单位
VCL有if测试,但是没有循环。
Backend declarations(声明backend)
一个backend申明创建和初始化一个backend目标:
backend www {
.host = "www.example.com";
.port = "http";
}
一个请求可以选着一个Backend:
if (req.http.host ~ "^(www.)?example.com$") {
set req.backend = www;
}
为了避免后端服务器过载,.max_connections 可以设置连接后端服务器得最大限制数。
在backend中申明的timeout参数可以被覆盖,.connect_timeout 等待连接后端的时间,.first_byte_timeout 等待从backend传输过来的第一个字符的时间,.between_bytes_timeout 两个字符的间隔时间

示例:
backend www {
.host = "www.example.com";
.port = "http";
.connect_timeout = 1s;
.first_byte_timeout = 5s;
.between_bytes_timeout = 2s;
}
DIRECTORS
Directors 基于健康状态和per-director算法选择不同的客户端。现在存在随机和循环两种director。
定义Directors:
director b2 random {
.retries = 5;
{
// We can refer to named backends
.backend = b1;
.weight = 7;
}
{
// Or define them inline
.backend = {
.host = "fs2";
}
.weight = 3;
}
}
The random director
任意的director使用.retries.这个参数指定查找可用后端的次数。默认director中的所有后端的.retries相同。
每个后端的选项 .weight ,和发送多少流量到这个后端有关。
THE round-robin director
Round-robin没有什么选项。
Bckend probes(后端探针)
探测后端,确定他们是否健康。返回的状态使用req.backend.healthy核对。.window我们检查到的最近的polls数量。.threshold 多少polls成功,我们就认为后端是健康的。.intial是多少探针确定varnish状态正常,默认和threshold值一样。
一个后端定义探针示例:
backend www {
.host = "www.example.com";
.port = "http";
.probe = {
.url = "/test.jpg";
.timeout = 0.3 s;
.window = 8;
.threshold = 3;
.initial = 3;
}
}
他可以指定原始的http请求:
backend www {
.host = "www.example.com";
.port = "http";
.probe = {
# NB: \r\n automatically inserted after each string!
.request =
"GET / HTTP/1.1"
"Host: www.foo.bar"
"Connection: close";
}
}
ACLS
一个ACL给一个访问控制列表命名,随后可以通过调用ACL名字来匹配对应的客户端地址。
acl local {
"localhost"; // myself
"192.0.2.0"/24; // and everyone on the local network
! "192.0.2.23"; // except for the dialin router
}
如果一个ACL中指定一个主机名,varnish不能解析,他将解析匹配到所有地址。
果你使用了一个否定标记(!),那么将拒绝匹配所有主机。
下面是一个匹配的示例:
if (client.ip ~ local) {
pipe;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: