首页 运维 正文
CentOS 5.8 下如何安装配置 Varnish-2.1.5 ?

 2022-10-23    331  

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

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

yuminstallgccgcc-c++
yuminstallautomakeautoconflibtoolncurses-devellibxsltgroffpcre-develpkgconfiglibtool-y

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

cd/usr/local/src
wgethttp://repo.varnish-cache.org/source/varnish-2.1.5.tar.gz
tarzxvfvarnish-2.1.5.tar.gz
cdvarnish-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&&makeinstall&&cd../

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

/usr/sbin/groupaddvarnish
/usr/sbin/useradd-s/sbin/nologin-gvarnishvarnish
mkdir-p/data/varnish/{cache,log}
chown-Rvarnish: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如下所示:

backendrserver1
{
.host="192.168.1.104";
.port="80";
.probe={
.timeout=5s;#等待多长时间超时
.interval=2s;#检查时间间隔
.window=10;#varnish将维持10个slidingwindows的结果
.threshold=8;#如果是8次.windows检查是成功的,就宣告后端的Web机器是健康的
}
}
backendrserver2
{
.host="192.168.1.105";
.port="80";
.probe={
.timeout=5s;
.interval=2s;
.window=10;
.threshold=8;
}
}

#指定一个名为realserver组,使用random机制,权重越大,分配的访问越多,可根据服务器性能来设定;而round-robin(轮询)机制是不能指定weight的

directorrealserverrandom{
{
.backend=rserver1;
.weight=5;
}
{
.backend=rserver2;
.weight=6;
}
}

#定义能清理缓存的机器,这里只允许本机能用purge的方式清理

aclpurge{
"localhost";
"127.0.0.1";
}
subvcl_recv
{
if(req.http.host~"^(.*).yuhongchun027.net")
{
setreq.backend=realserver;
}
else
{
error200"Nocahceforthisdomain";
}
if(req.request=="PURGE")
{
if(!client.ip~purge)
{
error405"Notallowed.";
}
else
{
return(pipe);
}
}

#获取客户端真实IP地址

if(req.http.x-forwarded-for)
{
setreqreq.http.X-Forwarded-For=
req.http.X-Forwarded-For","client.ip;
}
else
{
setreq.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);
}
}subvcl_pipe
{
return(pipe);
}subvcl_pass
{
return(pass);
}subvcl_hash
{
setreq.hash+=req.url;
if(req.http.host)
{
setreq.hash+=req.http.host;
}
else
{
setreq.hash+=server.ip;
}
return(hash);
}subvcl_hit
{
if(req.request=="PURGE")
{
setobj.ttl=0s;
error200"Purged.";
}
if(!obj.cacheable)
{
return(pass);
}
return(deliver);
}subvcl_miss
{
if(req.request=="PURGE")
{
error404"Notincache.";
}
if(req.http.user-agent~"spider")
{
error503"Notpresentlyincache";
}
return(fetch);
}
subvcl_fetch
{
if(req.request=="GET"&&req.url~"\.(txt|js)$")
{
setberesp.ttl=3600s;
}
else
{
setberesp.ttl=30d;
}
if(!beresp.cacheable)
{
return(pass);
}
if(beresp.http.Set-Cookie)
{
return(pass);
}
return(deliver);
}
subvcl_deliver{
if(obj.hits>0){
setresp.http.X-Cache="HITFROMwww.yuhongchun027.net";
}else{
setresp.http.X-Cache="MISSFROMwww.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@localhostcache]#curl-Ihttp://www.yuhongchun027.net/
HTTP/1.1200OK
Server:Apache/2.2.3(CentOS)
Last-Modified:Wed,28Aug201316:27:33GMT
ETag:"10d242-e-776b6740"
Content-Type:text/html;charset=UTF-8
Content-Length:14
Date:Wed,21Aug201317:47:48GMT
X-Varnish:15847270791584726982
Age:10101
Via:1.1varnish
Connection:keep-alive
X-Cache:HITFROMwww.yuhongchun027.net

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

telnet127.0.0.13500
vcl.loadnewconfig/usr/local/varnish/etc/varnish/better.vcl
20013
VCLcompiled.
vcl.usenewconfig
2000

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

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

清除所有缓存:

/usr/local/varnish/bin/varnishadm-T192.168.1.103:3500url.purge*$

清除image目录下所有缓存:

/usr/local/varnish/bin/varnishadm-T192.168.1.103:3500url.purge/image/

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

/usr/local/varnish/bin/varnishadm-T192.168.1.103:3500purge.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的问题,这个话题说得太多了,这里实在不想再提了,记得将

ulimit-SHn65535

放在/etc/rc.local里即可,记得在启动varnish之前将此命令手动执行一遍,另外,在工作中发现,CentOS6.x x86_64下更改ulimit跟CentOS5.x x86_64略有不同,这点也请大家注意。

以上即为varnish-2.1.5在CentOS5.8下的安装配置过程,记录下作为工作笔记,年纪大了,起个备忘作用而矣。

个人博客:http://andrewyu.blog.51cto.com

微博地址:http://weibo.com/yuhongchun027

【声明】本文作者:余洪春(抚琴煮酒),英文名Andrew.Yu。在系统频道首发,转载请注明作者和出处。

原文链接:https://77isp.com/post/8717.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。