设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 5661|回复: 2

[Varnish] Varnish 基本语法学习笔记 [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
475
注册时间
2008-5-19
最后登录
2019-11-16
在线时间
1946 小时
阅读权限
200
积分
59409
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-12-16 11:18:48 |显示全部楼层
等了N久还不见新的版本出来,于是忍不住先学习一下,主要是看man page基本明白,但英语还是太差,有些细微之处不很明白,比如pass和pipe的区别等等
准备再次尝试一下,暂时把本站域名指到一台跑varnish的烂PC上,测试一下看看,获取些实际运行经验。打算跑个几天再改回来。

man page意译如下:
VCL语法比较简单,和C类似,if(){}的形式,=和==的区别,!、&&和||等等。但\符号没有特别的意思。
VCL里除了用==、!、&&、||做逻辑判断意外,还可以用~来表示与正则表达式或ACL的匹配。
VCL其实只是配置,并不是真正的编程语言,没有循环,没有自定义变量。
声明Backend
backend 名称 {
    set backend.host = "域名";
    set backend.port = "端口";
}
比如
backend www {
    set backend.host = "www.example.com";
    set backend.port = "http";
}   
声明的Backend可以用在判断请求针对哪个后端服务器
if (req.http.host ~ "^(www.)?example.com$") {
{
    set req.backend = www;
}
声明ACL
acl 名称 {
             "IP";
             "IP子网"/反掩码位数;
             ! "IP或IP子网"/反掩码位数;
         }
比如
acl local {
             "locahost";         /* myself */
             "10.0.0.1"/8;       /* and everyone on the local network */
             ! "10.0.0.23";      /* except for the dialin router */
         }
判断ACL也很简单
if (client.ip ~ local) {
    pipe;
}
还可以定义子程序
sub pipe_if_local {
    if (client.ip ~ local) {
        pipe;
    }
}
用call来调用
call pipe_if_local;
内置的例程
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  继续保留在缓存里
如果这些内置例程没有被定义,则执行缺省动作

一些内置的变量
now  当前时间,标准时间点(1970?)到现在的秒数
backend.host  后端的IP或主机名
backend.port  后端的服务名或端口
请求到达后有效的变量
client.ip  客户端IP
server.ip  服务端IP
req.request  请求类型,比如GET或者HEAD或者POST
req.url  请求的URL
req.proto  请求的HTTP版本号
req.backend  请求对应的后端
req.http.header  对应的HTTP头
往后段的请求时有效的变量
bereq.request  比如GET或HEAD
bereq.url  URL
bereq.proto  协议版本
bereq.http.header  HTTP头
从cache或后端取到内容后有效的变量
obj.proto  HTTP协议版本
obj.status  HTTP状态代码
obj.response  HTTP状态信息
obj.valid  是否有效的HTTP应答
obj.cacheable  是否可以缓存的内容,也就是说如果HTTP返回是200、203、300、301、302、404、410并且有非0的生存期,则为可缓存
obj.ttl  生存期,秒
obj.lastuse  上一次请求到现在间隔秒数
对客户端应答时有效的变量
resp.proto  response的HTTP版本
resp.status  回给客户端的HTTP状态代码
resp.response  回给客户端的HTTP状态信息
resp.http.header  HTTP头

变量可以通过set来赋值或通过remove来删除(清空)
sub vcl_recv {
    if (req.http.host ~ "^(www.)?example.com$") {
         set req.http.host = "www.example.com";
    }
}
sub vcl_fetch {
             remove obj.http.Set-Cookie;
}

来源: http://www.2tutu.com/post/161.html
<-sina_sign,1762622645,2a5b1a59,10->感谢大家对linuxtone的支持!</strong>

Rank: 6Rank: 6

注册时间
2010-11-24
最后登录
2016-9-7
在线时间
30 小时
阅读权限
70
积分
2614
帖子
36
主题
0
精华
0
UID
11223
发表于 2011-7-12 16:11:00 |显示全部楼层
请问想使用cacti来监控varnish的状态,测试了几个模板都有问题,请问有什么好的办法吗?

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2010-7-3
最后登录
2015-5-15
在线时间
267 小时
阅读权限
100
积分
46000
帖子
340
主题
21
精华
1
UID
9704
发表于 2011-7-12 18:13:36 |显示全部楼层
  学习了

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-12-16 20:22 , Processed in 0.022961 second(s), 14 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部