设为首页 收藏本站
查看: 325|回复: 0

[经验分享] varnish配置语法(应用)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-7 09:16:07 | 显示全部楼层 |阅读模式
varnish配置主要分为:后端配置,ACL配置,probes配置,directors配置,核心子程序配置几大块。其中后端配置是必要的,在多台服务器中还会用到directors配置,核心子程序配置。
后端配置:即给varnish添加反代服务器节点,最少配置一个。
ACL配置:即给varnish添加访问控制列表,可以指定这些列表访问或禁止访问。
probes配置:即给varnish添加探测后端服务器是否正常的规则,方便切换或禁止对应后端服务器。
directors配置:即给varnish添加负载均衡模式管理多个后端服务器。
核心子程序配置:即给varnish添加后端服务器切换,请求缓存,访问控制,错误处理等规则。

varnish基本语法 http://www.iyunv.com/thread-95020-1-1.html
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未包含)
wKiom1XB2YTQhrpOAANZ3bT5jDE801.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-95021-1-1.html 上篇帖子: linux下varnish4配置语法(基础) 下篇帖子: linux下varnish4安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表