下载安装
安装varnish需要两个包,一个是安装包一个是他的库文件,如下:
varnish-3.0.5-1.el6.x86_64.rpm
varnish-libs-3.0.5-1.el6.x86_64.rpm
开启varnish
/etc/init.d/varnish start
修改访问端口
建议修改为80端口,这样浏览器就可以直接访问
配置文件在
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
找到上面那行,修改为80端口
还有一些其他关于varnish本身的默认参数,可以根据需要也去修改
修改后台服务器ip
配置文件为
/etc/varnish/default.vcl
加入如下所示代码
backend default {
.host = "172.25.49.2";
.port = "80";
}
表示后台服务器的ip是172.25.49.2
访问端口为80
设置完成后重新加载配置
/etc/init.d/varnish reload
测试
在172.25.49.2开启http服务,随意写一个默认的网页
在测试机上修改本地解析
/etc/hosts
在测试机浏览器上输入url,就可以通过varnish访问172.25.49.2上的http服务,但是效果不明显。
使测试效果明显
在/etc/varnish/default.vcl加入如下代码
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
表示在varnish缓存中寻找需要访问的数据
若找到了,则返回 HIT from westos cache
若没有找到就返回 MISS from westos cache
完成后需要重新加载配置
/etc/init.d/varnish reload
再测试的时候,在测试机的shell中,输入命令
curl -I www.westos.org
即可查看是否命中。
负载均衡
一般来说,服务器都是集群,所以一般访问都是通过特定的算法计算,然后让varnish通过算法对访问进行控制
backend web1 {
.host = "172.25.49.2";
.port = "80";
}
backend web2 {
.host = "172.25.49.3";
.port = "80";
}
当访问的是web1时,去访问2服务器,是web2时,访问3服务器
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
表示在varnish缓存中寻找需要访问的数据
若找到了,则返回 HIT from westos cache
若没有找到就返回 MISS from westos cache
director lb round-robin {
{.backend = web1;}
{.backend = web2;}
}
在lb中有web1和web2两个服务器代理,通过rr轮回进行访问
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
当浏览器访问的是www.westos.org或.westos.org时,找lb这个代理,当是bbs.westos.org时,访问web2这个代理
其他的都是错误的
Varnish的推送更新
网络上有各种各样的推送更新系统,本博客选择了一个来源于网络的php代码,所以在服务器上需要安装php,推送系统使用的http协议,所以要安装http服务,http默认使用的80端口,但varnish已经占用了80端口,所以需要改变http的服务端口,
下载安装所需要的php代码,然后修改配置文件,具体
如下,配置文件放在http的默认发布目录下。
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.49.1'),
'port' => '80',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
完成后,重启http服务
修改varnish 的配置文件,主要加上访问控制策略
acl redhat {
"127.0.0.1";
"172.25.49.0"/24;
}
表示redhat这个访问策略,在本机和172.25.49.0/24这个网段可以修改。
redhat的策略如下
if (req.request == "BAN") {
if (!client.ip ~ redhat) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
完成后,重启varnish就可以使用
测试:
在测试机上输入url,就可以显示
就可以推送了