zoukankan      html  css  js  c++  java
  • varnish 子程序流程

    VCL中主要动作:

    pass:当一个请求被pass后,这个请求将通过varnish转发到后端服务器,该请求不会被缓
    存,后续的请求仍然通过Varnish处理。pass可以放在vcl_recv 和vcl_fetch中。
    lookup:当一个请求在vcl_recv中被lookup后,varnish将从缓存中提取数据,如果缓存中
    没有数据,将被设置为pass,不能在vcl_fetch中设置lookup。
    pipe:pipe和pass相似,都要访问后端服务器,不过当进入pipe模式后,在此连接未
    关闭前,后续的所有请求都直接发到后端服务器,不经过Varnish的处理。
    deliver:请求的目标被缓存,然后发送给客户端
    hit_for_pass:表示直接从后台获取数据,会创建一个hit_for_pass的对象,该对象的TTL
    值将会被设置成beresp.ttl的当前值。用来控制vcl_deliver如何处理当前的请求,
    后续的请求会直接vcl_pass,可在vcl_fetch中用
    fetch:从后端服务器获取请求目标,控制权转交给vcl_fetch。
    hash:进入Hash模式
    restart:重启本次事务,重新返回给vcl_recv,如果重启次数超过了max_restarts报错
    ok:表示正常
    error:表示错误

     VCL中,有3个重要的数据结构

    req
    请求目标,当varnish接收到一个请求,这时req object就被创建了,在vcl_recv中的大部分工作,都是在req object上展开的。

    • client.ip:客户端IP
    • req.request:请求类型,例如”GET”,”HEAD”
    • req.url:请求的URL
    • req.backend:使用哪个后端服务器为这个请求提供服务
    • req.backend.healthy:后端服务器是否健康
    • req.http.header:对应的HTTP头
    • req.grace:设置对象被保持的时间


    beresp
    后端服务器返回的目标,它包含返回的头信息,在vcl_fetch中的大部分工作都是在beresp object上开展的。

    • bereq.request:请求的类型("GET", "HEAD")
    • bereq.url:请求的url
    • bereq.http.header:请求的HTTP header
    • beresp.do_gzip:是否在存储前Gzip压缩
    • beresp.do_gunzip:是否在存储前解压缩
    • beresp.http.headerHTTP header
    • beresp.statusHTTP的状态码
    • beresp.ttl:对象保存的时间
    • beresp.grace:对象grace保存的时间

    obj
    被cache的目标,只读的目标被保存于内存中,obj.ttl的值可修改,其他的只能读。

    • obj.status :服务器返回的HTTP状态码
    • obj.ttl:目标的剩余生存时间,以秒为单位
    • obj.grace:对象grace的存活时间
    • obj.http.header:Http header
  • 相关阅读:
    Telink TLSR825x系列SDK增加串口打印log功能
    Telink BDT和烧录器EVK的使用
    Telink SDK IDE开发环境中函数链接跳转异常和实际编译项目显示灰色问题的解决
    Telink SDK 的编译设置(以825x系列的一个SDK为例)
    Telink IDE的下载和SDK的导入
    Git项目管理出现 .gitignore文件不起作用的解决
    char和signed char不同编译器下的使用反思
    动态内存的分配
    结构体和联合体
    C语言中利用clock设计一个简单的定时器
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/9216239.html
Copyright © 2011-2022 走看看