varnish-学习总结(VCL)

VCL语法

VCL的语法比较简单,因为设计参考了C和Perl语言,因此和C和Perl语言相似。其基本语法说明如下:

  1. 使用’{}'花括号做界定符
  2. 使用’;'分号表示声明结束
  3. //、#或/* XXX */用于注释
  4. 使用sub关键词定义函数,如:sub vcl_deliver{};
  5. 有内置变量
  6. 有 if 测试,但是没有循环
  7. 使用终止语句(return)将控制权返回给varnish,没有返回值
  8. 操作符:=(赋值)、==(等值比较)、~(模式匹配)、!(取反)、&&(逻辑与)、||(逻辑或),VCL 支持正则表达式, ACL 匹配使用 ~ 操作。

VCL变量

now \\当前时间

下面的变量在 backend 申明中有效:
.host \\一个 backend 的主机名或者 IP 地址
.port \\一个 backend 的服务名字或者端口号

下面的变量在处理请求时有效:
client.ip \\客户端 IP
server.hostname \\server 的主机名
server.identity \\server 的身份,使用-i 参数设置,如果 –i 参数没有传递给
varnishd, server.identity 将给 varnishd 实例设置名字。设置详细的信息使用 –n 参数。
server.ip \\客户端连接上 socket,接收到的 IP 地址
server.port \\客户端连接上 socket,接收到的端口号
req.request \\请求类型,例如”GET”,”HEAD”
req.url \\请求的 URL
req.proto \\客户端使用的 HTTP 的协议版本
req.backend \\使用哪个后端服务器为这个请求提供服务
req.backend.healthy \\后端服务器是否健康
req.http.header \\对应的 HTTP 头
bereq.connect_timeout \\等待后端服务器响应的时间
bereq.first_byte_timeout \\等待接收第一个字节的等待时间, pipe 模式中无30
效。
bereq.between_bytes_timeout \\短时间内,两次从后端服务器接收到字节的间
隔, pipe 模式无效。

下面这些变量在请求目标被成功的从后端服务器或者缓存中获得后有效
obj.proto \\返回请求目标的 HTTP 版本
obj.status \\服务器返回的 HTTP 状态码
obj.response \\服务器返回的 HTTP 状态信息
obj.cacheable \\如果返回的结果是可以缓存的,而且 HTTP 状态码必须是 200,03, 300, 301, 302, 404410.
obj.ttl \\目标的剩余生存时间,以秒为单位。
obj.lastuse \\最后一个请求后,过去的时间,以秒为单位。
obj.hits \\大概的 delivered 的次数,如果为 0,表明缓存出错。

下面这些变量在目标 hash key 以后有效
req.hash \\hash key 和缓存中的目标相关,在读出和写入缓存时使用。

下面这些变量在准备回应客户端时使用
resp.proto \\准备响应的 HTTP 协议版本
resp.status \\返回客户端的 HTTP 状态码
resp.response \\返回客户端的 HTTP 状态信息
resp.http.header \\通信的 HTTP 头

VCL子程序

子程序简单记录,详细内容可查看官网

官方网站:
http://book.varnish-software.com/4.0/chapters/VCL_Subroutines.html(子程序讲解)
http://book.varnish-software.com/4.0/chapters/VCL_Basics.html#vcl-syntax(vcl工作流程讲解)

vcl_init	\\当VCL加载时调用,之后加载客户请求,一般用于初始化VMODS
vcl_recv 	\\vcl第一个程序,起始访问控制
vcl_hash 	\\始终跟着recv的程序,通过hash表记录查询缓存内容
vcl_pipe 	\\将客户端请求直接传递给后端服务器,在请求和返回的内容没有改变的情况下,将不变的内容直接返回给客户端。直到这个连接关闭。
vcl_pass 	\\当vcl_recv函数执行pass动作进入pass模式时该函数被调用,用于将客户端请求直接转发给后端服务器,后端服务器响应给客户端时,不进行缓存。由于直接将请求转发给后端服务器,因此该连接下的响应数据都是最新的。
vcl_hit 	\\执行lookup命令后,如果在缓存中找到请求数据,则自动调用该函数。
vcl_miss 	\\执行lookup命令后,如果在缓存中没有找到请求数据,则自动调用该函数
vcl_purge 	\\清除指定缓存中记录的内容
vcl_synth	\\用于在Varnish中生成内容误,可以在这里创建错误消息
vcl_deliver	\\将请求的数据返回给客户
vcl_backend_fetch \\访问后端服务器内容请求发起
vcl_backend_response \\访问后端服务器内容返回结果处理,是否缓存
vcl_backend_error \\访问后端服务器内容错误后处理信息反馈
vcl_fini \\卸载当前VCL配置,清理VMODS

客户端访问工作线程子程序逻辑图(含后端服务器访问工作线程)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值