系统环境: rhel6 x86_64 iptables and selinux disabled

主机: 192.168.122.160:virnish apache server60.example.com

192.168.122.154:apache server54.example.com

192.168.122.1 desktop36.example.com

相关网址: http://repo.varnish-cache.org/redhat/varnish-3.0/el6/x86_64/

所需的包:varnish-libs-3.0.4-1.el6.x86_64.rpm
varnish-3.0.4-1.el6.x86_64.rpm bansys.zip

VCL处理流程图

处理过程大致分为如下几个步骤:

(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或

Pipe,或者进入 Lookup(本地查询)。

(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进

入 miss 状态。

(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。

(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地

的存储。

(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

virnish的安装和配置

(1)安装

[root@server60
kernel]# rpm -ivh varnish-libs-3.0.4-1.el6.x86_64.rpm

[root@server60
kernel]# rpm -ivh varnish-3.0.4-1.el6.x86_64.rpm

(2)配置

#配置单个后端服务器

[root@server60
kernel]# vim /etc/sysconfig/varnish

VARNISH_LISTEN_PORT=80
(配置varnish监听端口)

[root@server60
kernel]# vim /etc/varnish/default.vcl

backend
default {

.host = "192.168.122.160";

.port = "";

}
(配置一个后端服务器)

[root@server60
kernel]# yum install httpd -y

[root@server60
kernel]# vim /etc/httpd/conf/httpd.conf

#Listen
12.34.56.78:80

Listen
8080
(配置apache监听端口)

[root@server60
kernel]# echo `hostname` > /var/www/html/index.html

[root@server60
kernel]# /etc/init.d/httpd start

[root@server60
kernel]# /etc/init.d/varnish start

[root@server60
kernel]# netstat -antple

tcp
0 0 0.0.0.0:80 0.0.0.0:*
LISTEN 0 10028 1501/varnishd

tcp
0 0 :::8080 :::*
LISTEN 0 9967 1475/httpd

端口说明启动成功.

测试:访问192.168.122.160和执行curl
-I server60.example.com能看到如下页面说明配置成功.

#查看缓存命中情况

[root@server60 kernel]# vim /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);

}

[root@server60 kernel]# /etc/init.d/varnish reload

测试:执行curl -I server60.example.com能看到如下页面说明配置成功.

上图为无命中

上图为命中

#通过 varnishadm 手动清除缓存

# varnishadm ban.url .*$ #清除所有

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

# varnishadm ban.url /admin/$ #清除 admin 目录缓存

#配置多个不同域名站点的后端服务器

以下步骤在server60上实施:

[root@server60 ~]# vim /etc/varnish/default.vcl

backend server60 {

.host = "192.168.122.160";

";

}

backend server54 {

.host = "192.168.122.154";

";

}

sub vcl_recv {

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

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

set req.backend =server60;

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

set req.backend = server54;

} else {

error 404 "westos cache";

}

}

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

[root@server60 ~]# echo www.westos.org > /var/www/html/index.html

[root@server60 ~]# /etc/init.d/httpd restart

[root@server60 ~]# /etc/init.d/varnish reload

以下步骤在server54上实施:

[root@server54
kernel]# yum install httpd -y

[root@server54
kernel]# echo bbs.westos.org > /var/www/html/index.html

[root@server54
kernel]# /etc/init.d/httpd start

测试:

注:在访问的那台机子上/etc/hosts里要写上解析:

192.168.122.160
www.westos.org bbs.westos.org

访问www.westos.org和执行curl
-I www.westos.org可看到如下页面说明成功.

访问bbs.westos.org和执行curl -I bbs.westos.org可看到如下页面说明成功.

#负载均衡

以下步骤在server54上实施:

[root@server54 ~]# vim /etc/httpd/conf/httpd.conf

NameVirtualHost *:80 (去掉注释)

<VirtualHost *:80>

DocumentRoot /var/www/html

ServerName bbs.westos.org

</VirtualHost>

<VirtualHost
*:80>

DocumentRoot /var/www/westos.org

ServerName
www.westos.org

</VirtualHost>

[root@server54
~]# echo bbs.westos.org > /var/www/html/index.html

[root@server54
~]# mkdir /var/www/westos.org

[root@server54
~]# echo www2.westos.org > /var/www/westos.org/index.html

[root@server54
~]# /etc/init.d/httpd restart

以下步骤在server60上实施:

[root@server60
~]# vim /etc/varnish/default.vcl

backend
server60
{

.host = "192.168.122.160";

.port = "";

}

backend
server54
{

.host = "192.168.122.154";

.port = "";

}

director
lb
round-robin {

{
.backend = server60;
}

{
.backend = server54;
}

}

sub
vcl_recv {

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

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

set req.backend = lb;

return (pass);

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

set req.backend = server54;

} else {

error 404 "westos cache";

}

}

[root@server60
~]# echo www1.westos.org > /var/www/html/index.html

[root@server60
~]# /etc/init.d/varnish reload

测试:

分别访问bbs.westos.orgwww.westos.org

若访问bbs.westos.org出现如下页面,访问www.westos.org页面在www1.westos.org和www2.westos.org之前切换说明配置成功

#varnish cdn 推送平台

以下步骤在desktop36上实施:

[root@desktop36 ~]# yum install httpd php -y

[root@desktop36 ~]# unzip bansys.zip -d /var/www/html/

[root@desktop36 ~]# cd /var/www/html/

[root@desktop36 html]# cp -r bansys/* /var/www/html/

[root@desktop36 html]# vim config.php

///////////////////////数据库信息/////////////////////////

//数据库信息

/* $host = "localhost";

$user = "";

$passwd = "";

$dbname = "bansys";

$conn = mysql_connect($host, $user, $passwd) or die('Unable to connect database...');

mysql_select_db($dbname,$conn);

$query = "select ResourceIP from purgeapp_resource";

$results = mysql_query($query,$conn);

while ($row=mysql_fetch_row($results)) {

$varnish_host[] = $row[0];

}

mysql_close($conn);*/

////////////////////////////////////////////////////////

//varnish主机列表

//可定义多个主机列表

$var_group1 = array(

'host' => array('192.168.122.160'),
(varnish所在主机的ip)

'port' =>
'',(与varnish所在主机的/etc/sysconfig/varnish中的VARNISH_ADMIN_LISTEN_PORT所对应的端口一致)

);

//这个使用了mysql读取数据
/*
$var_group3 = array(

'host'
=> $varnish_host,

'port' => '6082',

);*/

//varnish群组定义

//对主机列表进行绑定

$VAR_CLUSTER = array(

//
'cdn.hit008.com' => $var_group3,

'www.westos.org'
=> $var_group1,

);

//varnish版本

//2.x和3.x推送命令不一样

$VAR_VERSION = "";
(根据你所用varnish的版本设定)

以下步骤在server60上实施:

#bansys
有两种工作模式,分别是:telnet

http
模式。

#telnet
模式需要关闭
varnish
服务管理端口的验证,注释掉/etc/sysconfig/varnish
文件中的“-S
$ {VARNISH_SECRET_FILE}”这行,重启
varnish 服务即可。

#如果是
http 模式需要对
varnish 做以下设置:

[root@server60
~]# vim /etc/varnish/default.vcl

acl
westos {

"127.0.0.1";

"192.168.122.0"/24;

}

sub
vcl_recv {

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

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

set req.backend = lb;

# return (pass);

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

set req.backend = server54;

} else {

error 404 "westos cache";

}

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

if (!client.ip ~ westos) {

error 405 "Not allowed.";

}

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

error 200 "ban added";

}

}

[root@server60
~]# /etc/init.d/varnish reload

测试:

先访问下www.westos.org,然后按下图设置推送一次.

刷新下页面,若网页变成另一台机子上的页面,或者执行curl -I www.westos.org推送后X-Cache从HIT from westos cache变成 MISS from westos cache则说明推送成功.

Rhel6-varnish配置文档的更多相关文章

  1. MYSQL服务器my.cnf配置文档详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  2. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  3. Hibernate配置文档详解

    Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...

  4. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  5. Spring Hibernate4 整合配置文档

    1 applicationContext.xml配置文档 <?xml version="1.0" encoding="UTF-8"?><bea ...

  6. Kerberos主从配置文档

    Kerberos主从配置文档   1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...

  7. python常用模块-配置文档模块(configparser)

    python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...

  8. azkaban编译安装配置文档

    azkaban编译安装配置文档 参考官方文档: http://azkaban.github.io/azkaban/docs/latest/ azkaban的配置文件说明:http://azkaban. ...

  9. Python学习 :常用模块(四)----- 配置文档

    常用模块(四) 八.configparser 模块 官方介绍:A configuration file consists of sections, lead by a "[section]& ...

  10. configparser模块——配置文档

    configparser模块用于生成和修改常见配置文档. 预制配置文件:conf.ini [DEFAULT] ServerAliveInterval = 45 Compression = yes Co ...

随机推荐

  1. POJ - 1132Border

    POJ - 1132Border Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Descrip ...

  2. 用C++实现的SDK跨平台心得体会

    C/C++的跨平台特性相比于Java更加原生(Java是一次编译到处运行,而C/C ++则需要拿着源码重新编译一遍),实现一个C/C++跨平台程序一般有几点做法: 1.使用Qt 2.使用ANSI C/ ...

  3. Spring MVC 学习资料

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...

  4. transition、animation在macbook air上图片动画边缘抖动

    示例: BUG描述: 最近同事一项目中,产品提出在macbook air上,列表图片放大效果边缘出现抖动现象.在retina屏上没有此问题. 调试过程: 1.单独把结构分离.确定是否由其他元素引起. ...

  5. 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

    Twritters的异常检测算法(Anomaly Detection)做的比较好,Seasonal Hybrid ESD算法是先用STL把序列分解,考察残差项.假定这一项符合正态分布,然后就可以用Ge ...

  6. ruby on rails on windows

    这次想系统学会rails,最终目标是将redmine改造成顺手的工具,主要的手段就是开发redmine插件.虽然网上都推荐使用类Unix系统,可手头只有win7系统,就安装了. 难免会遇到这样那样的问 ...

  7. PDO处理大批量数据的入库

    <?php //最东端 东经135度2分30秒 //最西端 东经73度40分 //最南端 北纬3度52分 //最北端 北纬53度33分 //转换为度的单位$dbName = 'txhl';//数 ...

  8. windows进程详解

    1:系统必要进程system process    进程文件: [system process] or [system process]进程名称: Windows内存处理系统进程描述: Windows ...

  9. Script循环语句 的相关知识跟练习

    循环语句有两种问题类型:穷举和迭代 穷举: 在不知道什么情况下才是我们需要的结果的时候,只能让它一个一个的都执行一遍 迭代:在现有的条件下,根据规律,不断求解中间情况,最终推选出结果 两个关键词 br ...

  10. R开发环境(Eclipse+StatET)

    引用:http://cos.name/2008/12/eclipse-statet-for-r-editor/ StatET(www.walware.de/goto/statet) 1. 安装软件 s ...