等了N久还不见新的版本出来,于是忍不住先学习一下,主要是看man page。基本明白,但英语还是太差,理解能力也有限,有些细微之处不很明白,比如pass和pipe的区别等等。
安装过程就不说了,无非就是configure/make/make install,配置样例也都有,在昨天配置varnish的时候发现,man里提供的配置样例中有一段是这样的
if (req.http.Authenticate || req.http.Cookie) {
pass;
}
但是实际上这段配置在测试过程中造成了一些麻烦,情况很奇怪,怀疑是varnish的bug。网站图片显示不正常,文字貌似没问题,抓包看,竟然发现在客户端请求图片的时候,varnish把上一次回送的HTML文本内容又送了一遍。
由于不太清楚pass和pipe的区别,出于尝试目的于是我把配置改为:
if (req.http.Authenticate ){
pass;
}
if(req.http.Cookie) {
pipe;
}
也就正常了。
于是再次尝试一下,暂时把自己BLOG的域名指到一台跑varnish的烂PC上,测试一下看看,获取些实际运行经验。打算跑个几天再改回来。
昨天下班后修改DSN,本地大约过了5个小时,生效,访问 通过varnish缓存。
早上来看了下,varnish总共处理1395个请求,缓存命中是1132,看样子对于ZBLOG这样静态内容为主的站点,缓存命中还是比较高的。
自己的网站访问量并不大,其实最好能找个访问量比较大的站点进行一下实际测试,呵呵。
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 ~ "^()?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 */
}
Varnish 的详细介绍:请点这里
Varnish 的下载地址:请点这里
相关阅读:
CentOS 5.8下Varnish-2.1.5的安装配置
RedHat脚本改用CentOS源更新安装Nginx、PHP 5.3、Varnish