Varnish 是一个 web 加速器,被安装在 web 应用程序前面,缓存 web 应用程序,并响应

用户请求,varnish 让您的 web 应用程序运行的更快,并且 varnish 灵活好用。

 

1.varnish安装

需要软件包:varnish-libs-3.0.5-1.el6.x86_64.rpm varnish-3.0.5-1.el6.x86_64.rpm

yum install -y varnish-libs-3.0.5-1.el6.x86_64.rpm varnish-3.0.5-1.el6.x86_64.rpm
vim /etc/sysconfig/varnish

66VARNISH_LISTEN_PORT改为80

66 VARNISH_LISTEN_PORT=80

 

vim /etc/varnish/default.vcl

backend default {

  .host = "127.0.0.1";

  .port = "8080";

}

port值改为8080

 

vim /etc/httpd/conf/httpd.conf

136Listen值改为8080

Listen 8080

 

/etc/init.d/httpd start
/etc/init.d/varnish start
netstat -antlpe

wKioL1dsAYexmc_MAACUcRCSCys863.png


测试:

echo server1.example.com > /var/www/html/index.html

http://172.25.45.1

显示server1.example.com

vim /var/www/html/index.html     ##修改iindex.html的内容,刷新网页后,网页内容更新
curl -I 172.25.45.1

wKioL1dsAhuB2Q9NAABrOQpks8o064.png


curl -I 172.25.45.1/index.html

wKioL1dsAivjJQDiAABuweeh67c370.png


curl -dump 172.25.45.1

wKiom1dsAjaSokqTAAASeFTmDh8968.png

 

测试:

可以更改/etc/sysconfig/varnish文件更新时间的设定

94 # # Default TTL used when the backend does not specify one

95 VARNISH_TTL=5

 

/etc/init.d/varnish restart
echo test....> /var/www/html/index.html

5秒后刷新页面则内容更改

 

可用curl -I localhost 查看时间

curl -I localhost/index.html
curl -dump localhost/index.html##显示内容

 

##查看缓存命中情况

vim /etc/varnish/default.vcl

backend default下添加以下内容:

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);

}

wKiom1dsAd7i3esbAABJZZrtPGE565.png


/etc/init.d/varnish reload


测试:

curl -I 172.25.45.1/index.html

wKiom1dsAmyA2dXMAAB2VxXRgEk946.png


wKioL1dsAqqSvdF9AAB4HNz76Gg165.png


会多出一行X-Cache,显示缓存命中情况

 

通过curl 172.25.45.1/index.htmlcurl 172.25.45.1查看缓存,然后修改iindex.html的内容,curl不更新,可以通过varnishadm ban.url .*$清除所有缓存

varnishadm ban.url /index.html    #清除 index.html 页面缓存


##定义多个不同域名站点的后端服务器

vim /etc/varnish/default.vcl

backend default下添加以下内容:

backend server2 {

  .host = "172.25.45.2";

  .port = "80";

}

 wKioL1dsA3OS0tOwAAAiLx1a47o367.png


sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {

set req.http.host = "www.westos.org";

set req.backend = default;

} elsif (req.http.host ~ "^bbs.westos.org") {

set req.backend = server2;

} else {error 404 "westos cache";

}

}

wKiom1dsAtTg3QAiAABZ2XtNl-I958.png

 

echo server1-www.westos.org > /var/www/html/index.html##server1虚拟机
echo server2-bbs.westos.org > /var/www/html/index.html##server2虚拟机
/etc/init.d/varnish reload


在物理机中修改/etc/hosts文件

vim /etc/hosts

wKioL1dsA4bTqxOaAAAWGX5DtIQ024.png


http://172.25.45.1/

wKiom1dsA5OhwKn9AABQ-IgxBOk803.png


http://www.westos.org/

wKioL1dsA6Oy6FhtAAAhySyM3H4763.png


http://bbs.westos.org/

wKiom1dsA7DTtEgJAAAkot1erQU315.png


#把多个后端聚合为一个组,并检测后端健康状况

vim /etc/varnish/default.vcl

backend server2下添加以下内容:

director westoslb round-robin {

{.backend = default;}

{.backend = server2;}

}

sub vcl_recv中第一个req.backend值改为westoslb

wKioL1dsA8Lx5VRrAABdhy69ByY061.png

 

server2

vim /etc/httpd/conf/httpd.conf

990NameVirtualHost *:80 的注释取消

并在最后添加以下内容:

<VirtualHost *:80>

    DocumentRoot /var/www/html

    ServerName www.westos.org

   serveralias westos.org

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot /bbs

    ServerName bbs.westos.org

</VirtualHost>

 

mkdir /bbs
echo bbs.westos.org > /bbs/index.html
echo server2-www.westos.org > /var/www/html/index.html
/etc/init.d/httpd restart

 

server1

/etc/init.d/varnish reload

 

http://bbs.westos.org/

显示bbs.westos.org

http://www.westos.org/

一开始显示server1-www.westos.org,过一会儿显示server2-www.westos.org

 

set req.backend = westoslb;下添加以下内容:

return (pass);

wKiom1dsA-aQ6-1TAABLLxRA7Uk320.png


/etc/init.d/varnish reload

 

测试:

http://www.westos.org/

不断刷新,页面在server1-www.westos.orgserver2-www.westos.org中切换

 

/etc/init.d/httpd stop

页面将停在server2-www.westos.org,而不会切换

 

##bansys##

所需软件包:bansys.zip

yum install -y unzip
unzip bansys.zip -d /var/www/html/
yum install -y php
cd /var/www/html/bansys/
mv * ..
cd ..
rm -rf bansys

vim config.php

将数据库信息10-22行注释掉wKiom1dsBBOAspIpAADTZWrUqfE017.png


$var_group1'host' => array的值改为当前虚拟机IP,端口改为6082;并将$var_group3注释掉

wKiom1dsBHHwhYvpAACOxBMT2X4731.png


$VAR_CLUSTER的内容改为'www.westos.org' => $var_group1,多余部分删掉

wKioL1dsBIygQmWBAABFq_J3Jtc746.png

 

/etc/init.d/httpd restart

测试:

http://172.25.45.1:8080/index.php

wKioL1dsBMejWXZ6AABqQ_HmIQg939.png

 

vim /etc/varnish/default.vcl

sub vcl_recv下面添加以下内容:

if (req.request == "BAN") {

if (!client.ip ~ westos) {

error 405 "Not allowed.";

}

ban("req.url ~ " + req.url);

error 200 "ban added";

}

wKiom1dsBNaxZBdSAAB23ddzZnE462.png


在最上面添加以下内容:

acl westos {

"127.0.0.1";

"172.25.45.0"/24;

}

wKiom1dsBP3z_pjCAAANzcx2s0U346.png

 

并将return (pass);注释掉

/etc/init.d/varnish reload


测试:

http://www.westos.org/index.html

显示server1-www.westos.org,且刷新时不能切换

http://172.25.45.1:8080/index.php

选择HTTP,在推送内容中输入/index.html,并提交

打开http://www.westos.org/index.html,刷新后页面变为server2-www.westos.org

重复上述步骤,页面会切换成server1-www.westos.org 

wKiom1dsBRPApd0fAAB4hGK6T4s592.png



wKioL1dsBROyUS3jAABRubK0BbI409.png