2022-10-23 387
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/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态