Varnish是一款强大的反向代理加速软件,关于其工作原理可以参考上图,其具体流程及VCL语法我这里就不做说明,网上资料多,大家还可以对照参考其官方网站和《Varnish中文权威指南》。

一、安装CentOS5.8系统环境下的依耐关系

yum install gcc gcc-c++
yum install automake autoconflibtool ncurses-devel libxslt groff pcre-devel pkgconfig libtool -y

二、下载varnish-2.1.5源码包,并进行编译安装。

cd /usr/local/src
wget  http://repo.varnish-cache.org/source/varnish-2.1.5.tar.gz
tar zxvf varnish-2.1.5.tar.gz
cd varnish-2.1.5.
./autogen.sh

#autogen.sh命令是用来检查软件的依耐关系是否满足,如果报错的话, 则应该如下

正常所示:

+ aclocal
+ libtoolize --copy --force
+ autoheader
+ automake --add-missing --copy --foreign
+ autoconf

继续编译安装:

./configure --prefix=/usr/local/varnish --enable-dependency-tracking --enable-debugging-symbols --enable-developer-warnings -enable-extra-warnings
make && make install && cd ../

三、创建varnish用户和组,以及varnish缓存文件和日志存放目录:

/usr/sbin/groupadd varnish
/usr/sbin/useradd -s /sbin/nologin  -g varnish varnish
mkdir -p /data/varnish/{cache,log}
chown  -R varnish:varnish /data/varnish/{cache,log}

四、我的测试环境是两台Web机器,IP为192.168.1.103(域名为http://www.yuhongchun027.net)的varnish机器对后端IP为192.168.1.104和192.168.1.105的机器进行反向代理加速,其配置文件/usr/local/varnish/etc/varnish/better.vcl如下所示:

backend rserver1
{
.host ="192.168.1.104";
.port = "80";
.probe = {
.timeout = 5s;          #等待多长时间超时
.interval = 2s;          #检查时间间隔
.window = 10;         #varnish将维持10个sliding windows的结果
.threshold = 8;         #如果是8次.windows检查是成功的,就宣告后端的Web机器
是健康的
}
}
backend rserver2
{
.host ="192.168.1.105";
.port = "80";
.probe = {
.timeout = 5s;
.interval = 2s;
.window = 10;
.threshold = 8;
}
}
#指定一个名为realserver组,使用random机制,权重越大,分配的访问越多,可根据
服务器性能来设定;而round-robin(轮询)机制是不能指定weight的
director realserver random {
{
.backend = rserver1;
.weight = 5;
}
{
.backend = rserver2;
.weight = 6;
}
}
#定义能清理缓存的机器,这里只允许本机能用purge的方式清理
acl purge {
"localhost";
"127.0.0.1";
}
sub vcl_recv
{if (req.http.host ~"^(.*).yuhongchun027.net"){      set req.backend =realserver;  }   else{      error 200 "Nocahce for this domain";  }            if (req.request =="PURGE"){         if (!client.ip ~purge){            error 405"Not allowed.";         } else{return (pipe); }
}
#获取客户端真实IP地址
if(req.http.x-forwarded-for)
{
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For "," client.ip;
}
else
{
set req.http.X-Forwarded-For =client.ip;
}
#对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服
务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接
收、处理,所以不缓存;
if (req.request !="GET" && req.request != "HEAD")
{
return (pipe);
}
if (req.http.Expect)
{
return (pipe);
}
if (req.http.Authenticate|| req.http.Cookie)
{
return (pass);
}
if (req.http.Cache-Control~ "no-cache")
{
return (pass);
}
#对JSP或者PHP文件不缓存
if(req.url ~"\.jsp" || req.url ~ "\.php" )
{
return (pass);
}
else
{
return (lookup);
}
}sub vcl_pipe
{
return (pipe);
}sub vcl_pass
{
return (pass);
}sub vcl_hash
{
set req.hash += req.url;
if (req.http.host)
{
set req.hash +=req.http.host;
}
else
{
set req.hash +=server.ip;
}return (hash);
}sub vcl_hit
{
if (req.request =="PURGE")
{
set obj.ttl = 0s;
error 200"Purged.";
}
if (!obj.cacheable)
{
return (pass);
}
return (deliver);
}sub vcl_miss
{
if (req.request =="PURGE")
{
error 404 "Not incache.";
}
if (req.http.user-agent ~"spider")
{
error 503 "Notpresently in cache";
}return (fetch);
}
sub vcl_fetch
{
if (req.request =="GET" && req.url ~ "\.(txt|js)$")
{
set beresp.ttl = 3600s;
}
else
{
set beresp.ttl = 30d;
}
if (!beresp.cacheable)
{
return (pass);
}
if (beresp.http.Set-Cookie)
{
return (pass);
}
return (deliver);
}
sub vcl_deliver {if (obj.hits > 0) {set resp.http.X-Cache= "HIT  FROM www.yuhongchun027.net";} else {set resp.http.X-Cache= "MISS FROM www.yuhongchun027.net";}
return (deliver);
}

五、启动varnish的命令很长,如下所示:

 /usr/local/varnish/sbin/varnishd -n /data/varnish/cache -f /usr/local/varnish/etc/varnish/better.vcl -a 0.0.0.0:80 -s
file,/data/varnish/varnish_cache.data,8G  -p user=varnish -p group=varnish -p default_ttl=14400 -p thread_pool_max=8000 -p send_timeout=20 -w
5,51200,30 -T 127.0.0.1:3500  -P /usr/local/varnish/var/varnish.pid

验证其是否生效可以用curl –I命令,如下所示:

[root@localhost cache]# curl -I http://www.yuhongchun027.net/

以下结果显示varnish缓存已经起作用了:

HTTP/1.1 200 OK
Server: Apache/2.2.3 (CentOS)
Last-Modified: Wed, 28 Aug 2013 16:27:33 GMT
ETag: "10d242-e-776b6740"
Content-Type: text/html; charset=UTF-8
Content-Length: 14
Date: Wed, 21 Aug 2013 17:47:48 GMT
X-Varnish: 1584727079 1584726982
Age: 10101
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT  FROM www.yuhongchun027.net

六、如果vcl配置文件发生改动,想要不重启而直接reload,可以用如下操作,可以在本机上进行telnet操作,连接3500管理端口:

telnet 127.0.0.1 3500
vcl.load newconfig /usr/local/varnish/etc/varnish/better.vcl
200 13
VCL compiled.
vcl.use newconfig
200 0

如果显示有200字样,则表示已经正常reload了,newconfig这个名字是自己定义的,熟悉varnish操作的朋友应该也清楚,通过telnet连接本机还可以进行清理缓存。

七、用varnishadm命令来清理缓存,例子如下所示:

清除所有缓存

/usr/local/varnish/bin/varnishadm -T 192.168.1.103:3500 url.purge *$

清除image目录下所有缓存

/usr/local/varnish/bin/varnishadm -T 192.168.1.103:3500 url.purge /image/

查看最近清除的详细url列表,可执行如下命令:

/usr/local/varnish/bin/varnishadm –T 192.168.1.103:3500 purge.list

另外,缓存命中率的高低直接说明了varnish的运行状态和效果,如果缓存率命中率过低,我们应该对varnish配置进行检查调整来进行提高,查看其命中率命令如下所示:

/usr/local/varnish/bin/varnishstat -n /data/varnish/cache

八、内核优化如下所示:

编辑/etc/sysctl.conf,添加如下选项:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

执行如下命令,让改动配置立即生效:

/sbin/sysctl –p

注意:老生常谈的ulimit的问题,这个话题说得太多了,这里实在不想再提了,记得将在/etc/rc.local添加如下内容:

ulimit –SHn 65535

注意:记得在启动varnish之前将此命令手动执行一遍(最方便的做法是放进经常运行的监控脚本或服务启动脚本),另外,在工作中发现,CentOS6.X x86_64下更改ulimit跟CentOS5.X x86_64是不同的,这点也请大家注意。以上即为varnish-2.1.5在CentOS5.8 x86_64下的安装配置过程,记录下作为工作笔记,方便以后在新机器上部署,年纪大了,起个备忘作用而矣。

CentOS5.8下varnish-2.1.5的安装配置相关推荐

  1. iis7 php5 isapi配置,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程

    说到PHP环境配置与安装,通常以Apache搭载PHP配置为主,随着PHP版本不断更新,对Windows IIS平台的支持也越来越好,在Windows IIS平台上配置安装PHP环境也越来越方便. 在 ...

  2. windows下MySQL 5.7+ 解压缩版安装配置方法

    原文:windows下MySQL 5.7+ 解压缩版安装配置方法 方法来自伟大的互联网. 1.去官网下载.zip格式的MySQL Server的压缩包,根据需要选择x86或x64版.注意:下载是需要注 ...

  3. Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程

    说到PHP环境配置与安装,通常以Apache搭载PHP配置为主,随着PHP版本不断更新,对Windows IIS平台的支持也越来越好,在Windows IIS平台上配置安装PHP环境也越来越方便. 在 ...

  4. win10下node使用管理神器NVM安装配置详细步骤

    一.参考node使用管理神器NVM安装配置超详细步骤(window10)_吃老鼠的猫的博客-CSDN博客_nvm安装及全局配置node 二.卸载之前安装的 1.命令行输入where node指令 找到 ...

  5. linux安装mysql字符_Linux下MySQL的彻底卸载和安装配置字符集

    前言: Linux环境下MySQL的安装和配置在网上已经有很多教程了.之所以写这篇文章是因为在配置字符集的时候找了网上的一些教程发现并不能用导致折腾了一阵子.下面的教程均是亲自实践. MySQL的彻底 ...

  6. mysql 5.5.23 winx64,win10下mysql 5.7.23 winx64安装配置方法图文教程

    本文记录了mysql 5.7.23 winx64安装教程,具体内容如下 Step1 选择手动下载版本 解压到自己指定的路径 上图中的my.ini及data文件夹在压缩包里是没有的,后面需要自己添加 m ...

  7. 在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问

    一.ElasticSearch简述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch ...

  8. 【开发环境】Windows环境下Python开发环境 Pycharm Anaconda安装配置(无错完整)

    目录 一.Python解释器: 1.官网下载解释器: 2.安装Python 解释器: 手动配置环境变量: 二.Pycharm 集成开发环境: 1.Pycharm官网下载: 2.Pycharm本地安装: ...

  9. Mac 下安装配置 Python 开发环境

    图片来源:Unsplash,作者 Markus Spiske 2019 年第 77 篇文章,总第 101 篇文章 前言 记录下 Mac 电脑的开发环境安装配置,主要包括: 安装&使用Homeb ...

  10. mysql 5.6.15安装图解_Windows8下mysql 5.6.15 安装配置方法图文教程

    MySQL是一款我十分喜欢的数据库,今天在Windows8系统下,下载了MySQL进行安装配置,下载地址:点击打开链接 特在此记录下自己的过程,一是起到总结的作用,二是能帮助那些和我一样在安装配置中有 ...

最新文章

  1. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
  2. 64位centos 下编译 hadoop 2.6.0 源码
  3. Putty中文乱码的解决方法
  4. 重磅!百度研究院发布2021年十大科技趋势预测
  5. 法国一家夜总会上演机器人钢管舞
  6. 04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)
  7. GoogleNet网络详解与keras实现
  8. c语言第四阶段在线作业,中石大(华东)12春(41400) 《C语言》第四阶段在线作业(自测)...
  9. 处理机调度的概念、层次
  10. android51版本小游戏,世界游戏大全51游戏下载-世界游戏大全51预约 安卓版v1.0.0-PC6手游网...
  11. 为什么阿里规定需要在事务注解 @Transactional 中指定 rollbackFor?这...
  12. sap服务器安装双系统教程,电脑安装双系统图文教程
  13. unity3d 官方demo入门概念
  14. python 声音强度检测_python – 从声音文件中检测频率
  15. 【转】Rstudio中修改工作路径的三种方法
  16. 数字孪生交通仿真(一)
  17. 9:参数校验-Java Spring
  18. Sun Solaris系统管理命令简介
  19. 华为最新智能服务器,曝光:华为最新一代FusionServer Pro 2488H V6智能服务器
  20. Java实现的小根堆

热门文章

  1. 写一个参数返回二进制中1的个数
  2. 使用MySql保存session
  3. Linux进程实践(1) --Linux进程编程概述
  4. [转载].Freescale.伦德全 - 电路板级的电磁兼容设计
  5. blog推荐 - 软件产品管理之Tyner Blain
  6. 遭遇ARP欺骗的处理办法
  7. windows dos/cmd常用命令
  8. Java 数组中找最大值和最小值
  9. Java JDK1.8安装
  10. flaming pear flood中文版