zoukankan      html  css  js  c++  java
  • 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头。
  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/lovefendi/p/4096521.html
Copyright © 2011-2022 走看看