VARNISH

来源:互联网 发布:淘宝客服电话人工按几? 编辑:程序博客网 时间:2024/05/10 22:48

VARNISH
这里写图片描述


安装

yum install varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm -y

后端服务器配置

server1

vim /etc/sysconfig/varnish66 VARNISH_LISTEN_PORT=80       ##varnish服务端口为80,但要注意http端口80,不要开启httpd服务否则有矛盾
vim /etc/varnish/default.vclbackend web1 {                  ##后端为web1  .host = "172.25.36.2";        ##主机为172.25.36.2  .port = "80";                 ##通过80端口/etc/init.d/varnish restart     ##重启varnish

server2

yum install httpd/etc/init.d/httpd start
vim /var/www/html/index.htmlcat /var/www/html/index.html<h1>server2.westos.org</h1>

测试:
curl -I www.westos.org
这里写图片描述

查看缓存命中情况

vim /etc/varnish/default.vclsub vcl_deliver {if (obj.hits > 0) {                              ##若命中缓存,则输出"HIT..."set resp.http.X-Cache = "HIT from westos cache";}else {set resp.http.X-Cache = "MISS from westos cache";##若缓存没有命中,则输出"MISS"}return (deliver);}

测试:
curl -I www.westos.org

  • MISS
    这里写图片描述

  • HIT
    这里写图片描述

通过varnishadm手动清楚缓存

  • varnishadm ban.url .*$
    清除所有缓存

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

  • varnishadm ban.url /admin/$
    清除admin缓存

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

vim /etc/varnish/default.vclbackend web1 {  .host = "172.25.36.2";    ##后端为172.25.36.2  .port = "80";             ##访问端口80backend web2 {  .host = "172.25.36.3";  .port = "80";}sub vcl_recv{if (req.http.host ~ "^(www.)?westos.org"){      ##访问(www.)westos.org时通过web1进行访问set req.http.host = "www.westos.org";set req.backend = web1;} elsif (req.http.host ~ "^bbs.westos.org") {   ##访问bbs.westos.org时通过web2进行访问set req.backend = web2;} else { error 404 "westos cache";}}

当访问www.westos.org域名时从web1上取数据,访问bbs.westos.org域名时从web2上取数据,访问其他页面报错。

测试:
提前在真机上添加解析

  • curl -I www.westos.org
    这里写图片描述
    curl -I bbs.westos.org
    这里写图片描述
    curl -I 172.25.36.1
    这里写图片描述

负载均衡

server1:

director lb round-robin {       ##将多个后端聚合为一个组lb进行轮询    { .backend = web1; }    { .backend = web2; }}vim /etc/varnish/default.vclsub vcl_recv {if (req.http.host ~ "^(www.)?westos.org") {set req.http.host = "www.westos.org";set req.backend = lb;       ##当访问www.westos.org时访问lb组return (pass);              ##为了测试方便,不进行缓存} elsif (req.http.host ~ "^bbs.westos.org") {set req.backend = web2;} else { error 404 "westos cache";}}

server2:

mkdir /www/bbs -pmkdir /www/westoscd /www/bbs/vim index.html1 bbs.westos.orgcd /www/westos/vim index.html1 westos.org
vim /etc/httpd/conf/httpd.conf<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.org990 NameVirtualHost *:80        ##开启虚拟主机80端口/etc/init.d/httpd restart       ##重启服务

在server2上添加www.westos.org bbs.westos.org的解析以便访问

测试:
172.25.36.2 轮询
这里写图片描述
这里写图片描述

varnish CDN 推送

安装php支持

(yum install unzip -y)

unzip bansys.zip -d /var/www/html/cd /var/www/html/bansys/mv * ..rm -fr bansys/yum install php/etc/init.d/httpd start 修改httpd为8080端口
vim /var/www/html/config.php##定义主机列表$var_group1 = array(                        'host' => array('172.25.36.1',),                                                'port' => '80',                                      );##对主机列表进行绑定$VAR_CLUSTER = array(                         'www.westos.org' => $var_group1,                    );#bansys 有两种工作模式,分别是:telnet 和 http 模式。#telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S ${VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。#如果是 http 模式需要对 varnish 做以下设置:vim /etc/varnish/default.vclacl westos {            ##设置访问控制"127.0.0.1";"172.25.36.0"/24;}if (req.request == "BAN") {if (!client.ip ~ westos) {error 405 "Not allowed.";}ban("req.url ~ " + req.url);error 200 "ban added";}

将default.vcl中return (pass)注释,保留缓存

测试:

  • www.westos.org/index.html
    这里写图片描述
  • 172.25.36.1:8080
  • 推送内容:index.html
    这里写图片描述
  • 推送成功会刷新页面轮询
    这里写图片描述
  • www.westos.org/index.html
    这里写图片描述