varnish配置语法(应用)

varnish配置主要分为:后端配置,ACL配置,probes配置,directors配置,核心子程序配置几大块。其中后端配置是必要的,在多台服务器中还会用到directors配置,核心子程序配置。


后端配置:即给varnish添加反代服务器节点,最少配置一个。

ACL配置:即给varnish添加访问控制列表,可以指定这些列表访问或禁止访问。

probes配置:即给varnish添加探测后端服务器是否正常的规则,方便切换或禁止对应后端服务器。

directors配置:即给varnish添加负载均衡模式管理多个后端服务器。

核心子程序配置:即给varnish添加后端服务器切换,请求缓存,访问控制,错误处理等规则。


varnish基本语法 http://php2012web.blog.51cto.com/5585213/1680580


varnish中内置子程序有:

注:varnish内置子程序均有自己限定的返回动作  return (动作);  不同的动作将调用对应下一个子程序。

vcl_recv

开始处理请求,通过 return (动作); 选择varnish处理模式,默认进入hash缓存模式(即return(hash);),缓存时间为配置项default_ttl(默认为 120秒)过期保持时间default_grace(默认为10秒)。该子程序一般用于模式选择,请求对象缓存及信息修改,后端节点修改,终止请求等操作。

可操作对象:(部分或全部值)

读:client,server,req,storage

写:client,req

返回值:

synth(status code,reason);  定义响应内容。

pass  进入pass模式,并进入vcl_pass子程序。

pipe  进入pipe模式,并进入vcl_pipe子程序。

hash  进入hash缓存模式,并进入vcl_hash子程序,默认返回值

purge  清除缓存等数据,子程序先从vcl_hash再到vcl_purge。


vcl_pipe

pipe模式处理,该模式主要用于直接取后端响应内容返回客户端,可定义响应内容返回客户端。该子程序一般用于需要及时且不作处理的后端信息,取出后端响应内容后直接交付到客户端不进入vcl_deliver子程序处理。

可操作对象:(部分或全部值)

读:client,server,bereq,req,storage

写:client,bereq,req

返回值:

synth(status code,reason);  定义响应内容。

pipe  继续pipe模式,进入后端vcl_backend_fetch子程序,默认返回值


vcl_pass

pass模式处理,该模式类似hash缓存模式,仅不做缓存处理。

可操作对象:(部分或全部值)

读:client,server,req,storage

写:client,req

返回值:

synth(status code,reason);  定义响应内容。

fetch  继续pass模式,进入后端vcl_backend_fetch子程序,默认返回值


vcl_hit

hash缓存模式时存在hash缓存时调用,用于缓存处理,可放弃或修改缓存。

可操作对象:(部分或全部值)

读:client,server,obj,req,storage

写:client,req

返回值:

restart 重启请求。

deliver 交付缓存内容,进入vcl_deliver子程序处理,默认返回值

synth(status code,reason);  定义响应内容。


vcl_miss

hash缓存模式时不存在hash缓存时调用,用于判断性的选择进入后端取响应内容,可以修改为pass模式。

可操作对象:(部分或全部值)

读:client,server,req,storage

写:client,req

返回值:

restart 重启请求。

synth(status code,reason);  定义响应内容。

pass 切换到pass模式,进入vcl_pass子程序。

fetch  正常取后端内容再缓存,进入vcl_backend_fetch子程序,默认返回值


vcl_hash

hash缓存模式,生成hash值作为缓存查找键名提取缓存内容,主要用于缓存hash键值处理,可使用hash_data(string) 指定键值组成结构,可在同一个页面通过IP或cookie生成不同的缓存键值。

可操作对象:(部分或全部值)

读:client,server,req,storage

写:client,req

返回值:

lookup 查找缓存对象,存在缓存进入vcl_hit子程序,不存在缓存进入vcl_miss子程序,当使用了purge清理模式时会进入vcl_purge子程序,默认返回值


vcl_purge

清理模式,当查找到对应的缓存时清除并调用,用于请求方法清除缓存,并报告。

可操作对象:(部分或全部值)

读:client,server,req,storage

写:client,req

返回值:

synth(status code,reason);  定义响应内容。

restart 重启请求。


vcl_deliver

客户端交付子程序,在vcl_backend_response子程序后调用(非pipe模式),或vcl_hit子程序后调用,可用于追加响应头信息,cookie等内容。

可操作对象:(部分或全部值)

读:client,server,req,resp,obj,storage

写:client,req,resp

返回值:

deliver 正常交付后端或缓存响应内容,默认返回值

restart 重启请求。


vcl_backend_fetch

发送后端请求之前调用,可用于改变请求地址或其它信息,或放弃请求。

可操作对象:(部分或全部值)

读:server,bereq,storage

写:bereq

返回值:

fetch 正常发送请求到到后端取出响应内容,进入vcl_backend_response子程序,默认返回值

abandon 放弃后端请求,并生成一个错误,进入vcl_backend_error子程序。


vcl_backend_response

后端响应后调用,可用于修改缓存时间及缓存相关信息。

可操作对象:(部分或全部值)

读:server,bereq,beresp,storage

写:bereq,beresp

返回值:

deliver 正常交付后端响应内容,进入vcl_deliver子程序,默认返回值

abandon 放弃后端请求,并生成一个错误,进入vcl_backend_error子程序。

retry 重试后端请求,重试计数器加1,当超过配置中max_retries值时会报错并进入vcl_backend_error子程序。


vcl_backend_error

后端处理失败调用,异常页面展示效果处理,可自定义错误响应内容,或修改beresp.status与beresp.http.Location重定向等。

可操作对象:(部分或全部值)

读:server,bereq,beresp,storage

写:bereq,beresp

返回值:

deliver 只交付 sysnthetic(string) 自定义内容,默认返回后端异常标准错误内容

retry 重试后端请求,重试计数器加1,当超过配置中max_retries值时会报错并进入vcl_backend_error子程序。


vcl_synth

自定义响应内容。可以通过synthetic()和返回值 synth 调用,这里可以自定义异常显示内容,也可以修改resp.status与resp.http.Location重定向。

可操作对象:(部分或全部值)

读:client,server,req,resp,storage

写:req,resp

返回值:

deliver 只交付 sysnthetic(string) 自定义内容,默认返回 sysnth 异常指定状态码与错误内容。

restart 重启请求。


vcl_init

加载vcl时最先调用,用于初始化VMODs,该子程序不参与请求处理,仅在vcl加载时调用一次。

可操作对象:(部分或全部值)

读:server

写:

返回值:

ok 正常返回,进入vcl_recv子程序,默认返回值


vcl_fini

卸载当前vcl配置时调用,用于清理VMODs,该子程序不参与请求处理,仅在vcl正常丢弃后调用。

可操作对象:(部分或全部值)

读:server

写:

返回值:

ok 正常返回,本次vcl将释放,默认返回值



以下是个人画的一个子程序调用流程图,通过大部分子程序的return返回值进入下一步行动,用于参考,如有不当还请指出:(restart,retry未包含)

wKioL1XCuCfhjc2vAANZ3bT5jDE715.jpg


你可能感兴趣的:(varnish,VCL)