Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84526
  • 博文数量: 36
  • 博客积分: 835
  • 博客等级: 准尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-14 09:26
文章分类

全部博文(36)

文章存档

2012年(1)

2011年(35)

我的朋友

分类: LINUX

2011-02-15 12:53:05

Varnish 请求处理流程
2010-08-30 21:02
注意一点:varnish并不是用你的vcl去替代 默认的vcl,而是优先执行你的vcl, 在一个例程中如果没有用指令(pass,pipe,lookup,error,hash,deliver,fetch,insert,discard,keep)显式结束的话,varnish仍然会执行默认的vcl。

所以,varnish运行的流程是:

Start
     |
   vcl_recv(yours)
     |
<- vcl_recv(default)  -> vcl_pass(yours) -> vcl_pass(default)   -------->
|    |                                                                  |
|  vcl_hash(yours)                                                      |
|    |                                                                  |
|  vcl_hash(default) -> vcl_miss(yours) -> vcl_miss(default)  ->  vcl_fetch(yours) -> vcl_fetch(default)
|    |                                                                                        |
|    -----------------> vcl_hit(yours)  -> vcl_hit(default)   ----------------------> vcl_deliver(yours) -> vcl_deliver(default) ->
|
-> vcl_pipe(default)
         |
   

varnish内置的例程
vcl_recv
有请求到达后成功接收并分析时被调用,一般以以下几个关键字结束。
error code [reason] 返回code给客户端,并放弃处理该请求
pass 进入pass模式,把控制权交给vcl_pass
pipe 进入pipe模式,把控制权交给vcl_pipe
lookup 在缓存里查找被请求的对象,根据查找结果把控制权交给vcl_hit或vcl_miss

vcl_pipe
进入pipe模式时被调用。请求被直接发送到backend,后端和客户端之间的后继数据不进行处理,只是简单传递,直到一方关闭连接。一般以以下几个关键字结束。
error code [reason]
pipe

vcl_pass
进入pass模式时被调用。请求被送到后端,后端应答数据送给客户端,但不进入缓存。同一连接的后继请求正常处理。一般以以下几个关键字结束。
error code [reason]
pass

vcl_hash
目前不使用

vcl_hit
在lookup以后如果在cache中找到请求的内容事调用。一般以以下几个关键字结束。
error code [reason]
pass
deliver 将找到的内容发送给客户端,把控制权交给vcl_deliver.

vcl_miss
lookup后但没有找到缓存内容时调用,可以用于判断是否需要从后端服务器取内容。一般以以下几个关键字结束。
error code [reason]
pass
fetch 从后端取得请求的内容,把控制权交给vcl_fetch.

vcl_fetch
从后端取得内容后调用。一般以以下几个关键字结束。
error code [reason]
pass
insert 将取到的内容插入缓存,然后发送给客户端,把控制权交给vcl_deliver


vcl_deliver
缓存内容发动给客户端前调用。一般以以下几个关键字结束。
error code [reason]
deliver 内容发送给客户端

vcl_timeout
在缓存内容到期前调用。一般以以下几个关键字结束。
fetch 从后端取得该内容
discard 丢弃该内容


vcl_discard
由于到期或者空间不足而丢弃缓存内容时调用。一般以以下几个关键字结束。
discard 丢弃
keep 继续保留在缓存里

如果这些内置例程没有被定义,则执行缺省动作
阅读(649) | 评论(0) | 转发(0) |
0

上一篇:Nginx log分割

下一篇:ssh端口映射

给主人留下些什么吧!~~