varnish 内置函数详细说明

Subroutine列表 •vcl_recv 在请求开始时候被调用,在请求已经被接收到并且解析后调用。目的就是决定是否处理这个请求,怎么处理,使用哪个后端。vcl_recv以return结束,参数可以为如下关键字: error code [reason]:返回错误码给客户端,丢弃请求。 pass:转换到pass模式。控制权最后会转移到vcl_pass。 pipe:转换到pipe模式。控制权最后会转移到vcl_pipe。 lookup:在缓存中寻找请求对象。控制权最后会转移到vcl_hit或者vcl_miss,决定于对象是否在缓存中。 •vcl_pipe 当进入pipe模式的时候被调用。在这个模式中,请求会被转移到后端,后续的数据不管是从客户端还是后端来的都会以不变的方式传送,直到连接关闭为止。vcl_pipe以return结束,参数可以为如下关键字: error code [reason]:返回错误码给客户端,丢弃请求。 pipe:以pipe模式执行。 •vcl_pass 当进入pass模式的时候会被调用。在这个模式中,请求会被传送到后端,然后后端的响应会被传送回客户端,但是响应不会进入缓存中。接下来通过相同客户端连接发起的请求会以普通的方式来处理。vcl_pass以return结束,参数可以为如下关键字: error code [reason]:返回错误码给客户端,丢弃请求。 pass:以pass模式执行。 restart:重新启动这个事务。增加了重启计数。如果重启的次数高于max_restarts,varnish会引起一个错误。 •vcl_hash 你如果把想把数据加入到hash中,那么调用hash_data()。vcl_hash以return结束,参数可以为如下关键字: hash:执行hash逻辑。 •vcl_hit 如果请求的对象在缓存中被找到了,那么在缓存查找结束后被调用。vcl_hit以return结束,参数可以为如下关键字: deliver:deliver缓存对象到客户端。控制权最后会转移到vcl_deliver。 error code [reason]:返回错误码给客户端,丢弃请求。 pass:切换到pass模式。控制权最后会转移到vcl_pass。 restart:重新启动这个事务。增加了重启计数。如果重启的次数高于max_restarts,varnish会引起一个错误。 •vcl_miss 如果请求的对象在缓存中没有被找到,那么在缓存查找结束后被调用。目的是为了决定是否去后端获取这个请求对象,并且要选择哪个后端。vcl_miss以return结束,参数可以为如下关键字: error code [reason]:返回错误码给客户端,丢弃请求。 pass:切换到pass模式。控制权最后会转移到vcl_pass。 fetch:去后端获取请求对象。控制权最后会转移到vcl_fetch。 •vcl_fetch 当一个对象被成功从后端获取的时候此方法会被调用。vcl_fetch以return结束,参数可以为如下关键字: deliver:可能把对象放入缓存中,然后再deliver到客户端。控制权最后会转移到vcl_deliver。 error code [reason]:返回错误码给客户端,丢弃请求。 esi:以ESI形式来处理刚刚被获取到的对象。 pass:切换到pass模式。控制权最后会转移到vcl_pass。 restart:重新启动这个事务。增加了重启计数。如果重启的次数高于max_restarts,varnish会引起一个错误。 •vcl_deliver 当一个缓存的对象被deliver到客户端的时候,此方法会被调用。vcl_deliver以return结束,参数可以为如下关键字: deliver:发送对象到客户端。 error code [reason]:返回错误码给客户端,丢弃请求。 restart:重新启动这个事务,增加重启计数。如果重启的次数高于max_restarts,varnish会引起一个错误。 •vcl_error 当遇见一个错误的时候会被调用,错误可能是跟后端有关系或者内部错误。vcl_error以return结束,参数可以为如下关键字: deliver:发送对象到客户端。 restart:重新启动这个事务,增加重启计数。如果重启的次数高于max_restarts,varnish会引起一个错误。

重要变量

subroutine不带参数,一般通过全局变量来实现信息的传递。

如下变量在backend中有效: •.host:backend的主机名或者IP。 •.port:backend的端口。

如下变量在处理一个请求(例如vcl_recv)的时候可用: •client.ip:客户端IP地址。 •server.hostname:服务器的主机名。 •server.identity:服务器标示,当启动varnish的时候用”-i”参数来指定。如果varnish启动时候没有指定”-i”参数,那么server.identity会被设置为用”-n”参数所指定的实例名称。 •server.ip:服务器IP地址。 •server.port:服务器端口。 •req.request:请求类型(例如“GET”,“HEAD”)。 •req.url:请求的URL。 •req.proto:HTTP协议版本。 •req.backend:处理请求的后端服务器。 •req.backend.healthy:后端是否健康。health check需要在backend的probe中进行设置。 •req.http.header:相关的HTTP头。 •req.hash_always_miss:强迫对于本次请求的缓存查找结果为miss。如果设置为”true”,那么varnish将会忽略任何存在的缓存对象,一直从后端重新获取资源。 •req.hash_ignore_busy:在缓存查找时候忽略任何忙的对象。如果有两个服务器,彼此互相查找缓存内容,那么可以使用这个变量来避免潜在的死锁。

如下变量在准备一个后端请求(比如在cache miss或者pass,pipe模式)的时候可用: •bereq.request:请求的类型(比如“GET”,“HEAD”)。 •bereq.url:请求的URL。 •bereq.proto:与后端服务器交互的HTTP协议版本。 •bereq.http.header:相关的HTTP头。 •bereq.connect_timeout:与后端连接的超时时间。 •bereq.first_byte_timeout:从后端返回第一个字节所需等待的秒数,在pipe模式中不可用。 •bereq.between_bytes_timeout:从后端返回的每个字节之间的时间间隔,以秒计。在pipe模式中不可用。

如下的变量在请求对象从后端返回之后,在其被放入缓存之前可用。换句话说,也就是在vcl_fetch中可用。 •beresp.proto:HTTP协议版本。 •beresp.status:后端返回的HTTP状态码(例如200,302等)。 •beresp.response:后端返回的状态内容(例如“OK”,“Found”)。 •beresp.cacheable:如果请求的结果是可以被缓存的,那么此变量为”true”。如果HTTP状态码为200, 203, 300, 301, 302, 404,410之一并且pass没有在vcl_recv中被调用,那么这个结果就是可以被缓存的。如果response的TTL和grace time都为0,那么beresp.cacheable将会为0。beresp.cacheable是可写的。 •beresp.ttl:缓存对象的生存时间,以秒为单位,这个变量是可写的。

在对象已经存在于缓存中并被查询到的时候,一般在vcl_hit和vcl_deliver中,如下的变量(大部分是read-only)可用: •obj.proto:与后端交互的HTTP版本协议。 •obj.status:后端返回的HTTP状态码。 •obj.response:后端返回的HTTP状态内容。 •obj.cacheable:如果对象的beresp.cacheable为”true”,那么此变量的值为”true”。除非你强制delivery,否则obj.cacheable一直为”true”。 •obj.ttl:缓存对象的生存时间,以秒为单位,这个变量是可写的。 •obj.lastuse:从现在到对象最近一次访问所间隔的时间,以秒为单位。 •obj.hits:对象被发送到客户端的次数,0表示缓存查询miss了。

如下变量在决定对象hash key的时候可用: •req.hash:hash key被用来关联一个缓存中的对象。在读写缓存的时候都会被用到。

如下变量在准备把一个响应发送给客户端时候可用: •resp.proto:响应使用的HTTP协议版本。 •resp.status:将要返回的HTTP状态码。 •resp.response:将要返回的HTTP状态内容。 •resp.http.header:相关的HTTP头。
时间: 2024-10-18 02:20:40

varnish 内置函数详细说明的相关文章

linux awk 内置函数详细介绍(实例)

这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y, x ) 返回 y/x 的反正切. cos( x ) 返回 x 的余弦:x 是弧度. sin( x ) 返回 x 的正弦:x 是弧度. exp( x ) 返回 x 幂函数. log( x ) 返回 x 的自然对数. sqrt( x ) 返回 x 平方根. int( x ) 返回 x 的截断至整数的

Python中内置函数的介绍

内置函数的功能介绍 常用内置函数如下: 1.abs() 绝对值 格式:abs(x) 例如:print(abs(-18)) >>> 18 返回值:number #该函数主要用于数值类的操作 2.all() 是否都为真 格式:all(iterable) 例如:print(all([1,2,3,])) >>> Ture 返回值:bool #该函数主要用于可迭代对象的操作,主要为列表.元祖.字典和集合.当这些类型的元素中有空字符串.空列表.空元祖.空字典.空集合时,则返回值为F

python函数(6):内置函数和匿名函数

我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部定义好我们可以直接调用的函数就叫内部函数.python一共给我们68个内置函数: abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() as

python-day04 内置函数和函数装饰器

python内置函数 1.数学相关 abs(x) 取x绝对值 divmode(x,y) 取x除以y的商和余数,常用做分页,返回商和余数组成一个元组 pow(x,y[,z]) 取x的y次方 ,等同于x ** y,如果给出z值,该函数就计算x的y次幂值被z取模的值 round(x,[,n]) 四舍五入取x的值,n表示取小数点几位 min(X) 取X中最小的值 max(X) 取X中最大值 练习举例: >>> abs(-10) #取-10的绝对值 10 >>> abs(10)

04_内置函数(二)

内置函数(二) 1.1 callable() 功能:函数是否可调用 示例1: def f1(): pass f1() f2 = 123 f2() # 输出结果 TypeError: 'int' object is not callable 示例2: def f1(): pass # f1() f2 = 123 # f2() print(callable(f1)) print(callable(f2)) # 输出结果 True False 1.2 chr() 功能:数字转字母,返回对应的ASCII

文成小盆友python-num3 集合,函数,-- 部分内置函数

本接主要内容: set -- 集合数据类型 函数 自定义函数 部分内置函数 一.set 集合数据类型 set集合,是一个无序且不重复的元素集合 集合基本特性 无序 不重复 创建集合 #!/bin/env python s1 = {"1","2","3","4"} ##或者 s2 = set() set 提供的功能 1 class set(object): 2 """ 3 set() -> n

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就

Python内置函数.md

Python3 内置函数 abs(x) 返回一个数的绝对值.参数可以是一个整数或者一个浮点数.如果参数是一个复数,那么将返回它的模. >>> abs(-123456) 123456 >>> abs(123456) 123456 all(iterable) 当 iterable 中所有元素都为 True 时(或者 iterable 为空),返回 True .相当于: def all(iterable): for element in iterable: if not el

python内置函数(1)

做了几道题,复习一下python的内置函数. python round() 函数 函数描述 round()函数返回浮点数x的四舍五入值 语法 round(x[, n]) 用法实例:浮点数x=3.1415926,用round()函数使x显示小数点后两位 print (round(x, 2)) 运行结果 3.14 多写一点 在使用round()函数的时候,有时候运行出的结果和自己想的不一样,比如: >>>round(2.25, 1) 2.2 >>>round(2.35, 1