配置文件模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vcl_recv:用来接收处理用户的请求

vcl_hash:如果请求时静态的数据,则去查看varnish本身的缓存

vcl_pass:当请求为动态数据时,则去后端(fetch)获取

vcl_pipe:不符合的请求返回错误页面

vcl_hit:本地找到客户端请求的数据

vcl_miss:本地没有找到客户端请求的数据

vcl_fetch(backend_response):将数据交给后端的节点

vcl_deliver:将响应交给客户端

预设变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
req:客户端发送给varnish请求使用的变量(req=request)
req.url:客户端请求url
req.http:客户端请求的请求头部

bereq:varnish给后端的服务端的请求使用的变量(bereq:backend request)
bereq.url:varnish请求url
bereq.http:varnish请求头部信息

resp:varnish向客户端响应使用的变量(resp:response)
resp.http:varnish响应客户端的头部信息
resp.status:返回状态码

beresp:服务节点给varnish的响应使用的变量(beresp:backend response)
beresp.uncacheable:响应数据是否不缓存
beresp.ttl:响应数据的缓存时间

obj:缓存在varnish中的数据使用的变量
obj.ttl:varnish本地缓存的时间
obj.hits:varnish本地缓存命中的次数

hash_data():对客户端请求的内容进行hash计算
hash_data(req.url)
hash_data(req.http.host)
hash_data(server.ip)

varnish是通过vcl语言进行管理的

vcl语法格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 运算符
= 赋值运算符
== 比较运算符
~ 正则匹配
# 逻辑运算符
! 逻辑非
!= 不等于
!~ 不匹配
&& || 逻辑或
# 数据类型
字符串 使用"" 如:"abc"
布尔值:
true false
有效时间 s秒 m分 d天
条件判断 if else