Rhel6-varnish配置文档
系统环境: 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.org和www.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配置文档的更多相关文章
- MYSQL服务器my.cnf配置文档详解
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- Hibernate配置文档详解
Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...
- Java代码规范、格式化和checkstyle检查配置文档
http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...
- Spring Hibernate4 整合配置文档
1 applicationContext.xml配置文档 <?xml version="1.0" encoding="UTF-8"?><bea ...
- Kerberos主从配置文档
Kerberos主从配置文档 1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...
- python常用模块-配置文档模块(configparser)
python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...
- azkaban编译安装配置文档
azkaban编译安装配置文档 参考官方文档: http://azkaban.github.io/azkaban/docs/latest/ azkaban的配置文件说明:http://azkaban. ...
- Python学习 :常用模块(四)----- 配置文档
常用模块(四) 八.configparser 模块 官方介绍:A configuration file consists of sections, lead by a "[section]& ...
- configparser模块——配置文档
configparser模块用于生成和修改常见配置文档. 预制配置文件:conf.ini [DEFAULT] ServerAliveInterval = 45 Compression = yes Co ...
随机推荐
- 使用Jquery解析Json基础知识
前言 在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. ...
- POJ - 3652 Persistent Bits
“模拟”类型,题型容易,使用bitset库对二进制逐位操作,初始化.十进制转二进制(unsigned int).位操作. POJ - 3652 Persistent Bits Time Limit: ...
- miniUI datagrid 获取序号
获取每一个row以后,其中的row._index字段和页面上显示的序号虽然看起来一样, 但是实际上不是同一个东西,如果用客户端排序模式,排序后,row._index和页面显示的序号就对不上了. 正确的 ...
- 【前端】互联网公司2014前端笔试面试题JavaScript篇(待续)
// 网上找的题目,自己做了下 /**************************** *1. 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序 *************** ...
- GZFramwork数据库层《前言》Demo简介
本系列旨在熟悉GZFramwork数据库层操作,对数据库表进行增删改查,单据编号生成等: 详细见图: 普通单表操作: 数据库建模: 创建表脚本: from sys.sysreferences r jo ...
- 12.NFS搭建配置
参考博客:http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html 1.关闭防火墙和SELINUX $ service iptable ...
- C# 使用lock关键字lock不同的对象
c# lock关键字的本质 是调用Monitor.Enter(object obj)并且在finally的时候调用Monitor.Exit(obj) 在obj是不同数据类型的时候会出现不同的情况 1. ...
- 《BI那点儿事》ETL中的关键技术
ETL(Extract/Transformation/Load)是BI/DW的核心和灵魂,按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤. ...
- C\C++ 获取当前路径
C\C++ 获取当前路径 获取当前工作目录是使用函数:getcwd.cwd指的是“current working directory”,这样就好记忆了. 函数说明: 函数原型:char* getc ...
- iOS 圆角图片
// 开启图形上下文UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);// 剪裁 UIBezierPath *path=[UIBezi ...