Varnish 后端配置文件

/ 0评 / 0

默认位置:/etc/varnish/default.vcl

backend nginxd01 {
.host = "192.168.2.96";
.probe = {
.url = "/control/HappyIndex";
.interval = 10s;
.window = 5;
.threshold = 3;
}
.first_byte_timeout = 15s;
}
##其中:
backend:定义一个名称为nginxd01的后端主机
.host:指定后端主机的IP地址或域名
.probe:定义判断后端主机的服务是否正常访问
.first_byte_timeout:指定接收第一个字节的timeout时间

backend nginxd02 {
.host = "192.168.2.82";
.probe = {
.url = "/control/HappyIndex";
.interval = 10s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
.first_byte_timeout = 15s;
}
##定义了另一台后端主机
director web random {
{ .backend = nginxd01;
.weight = 2;
}
{ .backend = nginxd02;
.weihet = 2;
}
}
##其中:
director:定义一个名称为web的负载均衡器;也就是有nginxd01,nginxd02两台后端服务器随机分担请求。
.weight:指定两台后端服务器的权值。权值高的处理请求的几率就高些。

acl purge {
"localhost";
"127.0.0.1";
"192.168.2.0"/24;
}
##其中:
这里设定清除缓存的规则,Varnish允许localhost,127.0.0.1和192.168.2.0/24三个来源IP通过purge的方法清除缓存。

sub vcl_recv {
if (req.restarts == 0) {
set req.http.Cdn-Src-Ip = client.ip;
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For + ", "+ client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
##其中:
vcl_recv:VCL的内置函数,用于接收和处理请求。当请求到达并被成功接收后被调用,通过判断请求的数据来决定如何处理请求。
req.restarts:表示请求重启的次数,默认最大值为4
client.ip:表示客户端IP
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return(lookup);
}
set req.backend = web;
##其中:
req.request:指定请求的类型,例如:GET,HEAD,POST等等
lookup:表示在缓存中查找被请求的对象,并且根据查找的结果把控制权交给函数vcl_hit或vcl_miss函数。
if (req.request != "GET" && req.request != "HEAD") {
return(pipe);
}
if (req.request == "GET" && req.url ~ "\.(txt|html|swf|flv|tiff|ico|css|gif|jpg|jpeg|png|bmp)$") {
unset req.http.cookie;
}
if (req.http.Authorization || req.http.Cookie) {
return(pipe);
}
else {
return(lookup);
}
}
##其中:
pipe:表示进入pipe模式,把请求控制权交给vcl_pipe函数
vcl_pipe:此函数在进入pipe模式时被调用,用于将请求直接传递至后端主机,在请求和返回的内容没有改变的情况下,将不变的内容返回给客户端,直到这个链接关闭。
req.url:指定请求的地址
unset req.http.cookie:清除url中有jpg|png|gif等文件的cookie

sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}

sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
}
##其中:
vcl_hit:在执行lookup指令后,在缓存中找到请求的内容后将自动调用该函数。
obj.ttl:表示返回内容的生存周期,也就是缓存时间,单位是秒。
如果请求的类型是purge方法,Varnishd会将此请求的缓存周期设置为0,也就是使这个url的缓存失效,从而达到刷新Varnish缓存的目的。
vcl_miss:在执行lookup指令后,在缓存中没有找到请求的内容时自动条用该方法。此函数可以判断是否需要从后端主机获取内容。

发表评论

电子邮件地址不会被公开。 必填项已用*标注