以下所有操作都是在Red-hat 6.5上
1.简单介绍Varnish
Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来。
varnish流程图:
挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 Varnish 最成功的应用案例。
2.安装varnish
varnish的安装不是直接在yum仓库里安装,而是将rpm包从官网下载下来,在安装包的目录下,执行yum install * 就可以进行安装了。
Varnish的rpm包:
varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
3.反向代理
vim /etc/sysconfig/varnish #进入此文件里,进行实验环境的配置
66 VARNISH_LISTEN_PORT=80 改为80端口,varnish直接去监听80端口
vim /etc/varnish/default.vcl
7 backend default {
8 .host = “172.25.77.2”; #反向代理去取数据的地方
9 .port = “80”;
10 }
/etc/init.d/varnish reload #重载varnish服务
提示:到172.25.77.2上开启httpd服务,并且在/var/www/html目录下,创建index.html(如果不改变配置文件的名称,必须要用index.html)
4.查看缓存命中情况(缓存120秒清除一次,在这120秒内,显示是击中的)
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);
}
5.手动清楚缓存
varnishadm ban.url .*$ #清除所有
varnishadm ban.url /index.html #清除 index.html 页面缓存
varnishadm ban.url /admin/$ #清除 admin 目录缓存
6.定义多个不同域名站点的后端服务器
vim /etc/varnish/default.vcl
7 backend web1 {
8 .host = "172.25.77.2";
9 .port = "80";
10 }
11
12 backend web2 {
13 .host = "172.25.77.3";
14 .port = "80";
15 }
访问www.westos.org域名,到web1,访问bbs.westos.org到web2
17 sub vcl_recv {
18 if (req.http.host ~ "^(www.)?westos.org") {
19 set req.http.host = "www.westos.org";
20 set req.backend = web1;
21 } elsif (req.http.host ~ "^bbs.westos.org") {
22 set req.backend = web2;
23 } else {error 404 "westos cache";
24 }
25 }
提示:在物理机上测试的时候,记得要在物理机上添加解析,vim /etc/hosts
7.负载均衡
17 director lb round-robin { #将多个后端聚合成一个名为lb的组,轮叫模式)
18
19 {.backend = web1;}
20 {.backend = web2;}
21 }
22
23 sub vcl_recv {
24 if (req.http.host ~ "^(www.)?westos.org") {
25 set req.http.host = "www.westos.org";
26 set req.backend = lb;
return(pass) #pass将当前请求直接转发到后端服务器。pass通常只处理静态页面。varnish也只缓存静态数据。
27 } elsif (req.http.host ~ "^bbs.westos.org") {
28 set req.backend = web1;
29 } else {error 404 "westos cache";
30 }
31 }
结果:输入www.westos.org的时候,会到多个聚合里面去找,web1是server2里面做的虚拟主机,web2是server3.
输入bbs.westos.org的时候,直接找虚拟主机中的bbs
虚拟主机的设置: 进入vim /etc/htttpd/conf/httpd.conf
NameVirtualHost *:80 #打开虚拟主机接口
<VirtualHost *:80>
DocumentRoot /var/www/html #文件根目录
ServerName server2
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/bbs
ServerName bbs.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/westos
ServerName www.westos.org
</VirtualHost>
必须创建自己要求的发布目录:
vim /www/bbs/index.html
vim /www/westos/index.html
7.Varnish cdn 推送平台
做这个实验的时候,要把那个return(pass)注释掉,方便观察实验效果!
yum install php -y #安装php语言环境(因为这个cdn平台是用PHP写的,要安装php环境)
安装http服务,修改http使用端口。
vim /etc/httpd/conf/httpd.conf
136 Listen 8080 (136行)
下载CDN推送平台的压缩包,将其解压到http的默认发布目录下,/var/www/html
unzip bansys.zip -d /var/www/html/ #解压包
cd /var/www/html/bansys/ mv * ..(将/bansys下的文件移动到/var/www/html下,在网页中可以显示出来!)
vim /var/www/html/config.php
9 //可定义多个主机列表
10 $var_group1 = array(
11 'host' => array('172.25.77.1',),
12 'port' => '80',
13 );
//对主机列表进行绑定
17 $VAR_CLUSTER = array(
18 'www.westos.org' => $var_group1,
19 );
22 //varnish版本
23 //2.x和3.x推送命令不一样
24 $VAR_VERSION = "3";