Varnish的安装与配置
2016-03-10 15:48
435 查看
一、Varnish的安装与配置
1、Varnish安装(rpm包软件)
接口
如有安装疑惑请访问varnish官网https://www.varnish-cache.org/installation/redha
2、Varnish目录结构
3、Varnish配置基本实例
3.1、修改 /etc/sysconfig/varnish
3.2、提供/etc/varnish/test.vcl
3、4启动Varnish服务
1、Varnish安装(rpm包软件)
<span style="font-size:18px;">rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-3.0.el5.rpm yum install varnish varnish-libs-devel -y</span>
接口
如有安装疑惑请访问varnish官网https://www.varnish-cache.org/installation/redha
2、Varnish目录结构
/etc/sysconfig/varnish #存放Varnish运行参数设置 /etc/varnish/ #存放Varnish VCL配置文件
3、Varnish配置基本实例
3.1、修改 /etc/sysconfig/varnish
vim /etc/sysconfig/varnish #VARNISH_VCL_CONF=/etc/varnish/default.vcl VARNISH_VCL_CONF=/etc/varnish/test.vcl #调用test.vcl文件 VARNISH_LISTEN_PORT=80 #改为80端口 VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 #监听地址 VARNISH_ADMIN_LISTEN_PORT=6082 #管理端口 VARNISH_SECRET_FILE=/etc/varnish/secret #密钥文件
3.2、提供/etc/varnish/test.vcl
cd /etc/varnish/ cp default.vcl test.vcl #复制默认配置文件3.3、配置/etc/varnish/test.vcl
############定义健康状态检测############### probe healthcheck { .url = "/"; #定义健康检查的页面 .interval = 6s; #探测请求的发送周期,默认为5秒; .timeout = 0.3 s; #每次探测请求的过期时长 .window = 8; #设定在判定后端主机健康状态时基于最近多少次的探测进行 .threshold = 3; #在.window中指定的次数中,至少有多少次是成功的才判定后端主机正健康运行 .initial = 3; #Varnish启动时对后端主机至少需要多少次的成功探测,默认同.threshold; } ############定义两组服务器############## backend web1 { .host = "172.16.10.7"; #服务器主机 .port = "80"; #服务器端口 .probe = healthcheck; #健康状态检测 } backend web2 { .host = "172.16.10.3"; .port = "80"; .probe = healthcheck; } backend app1 { .host = "172.16.10.7"; .port = "8080"; .probe = healthcheck; } backend app2 { .host = "172.16.10.3"; .port = "8080"; .probe = healthcheck; } ############定义集群,调用服务器############## director webserver random { #定义一个名为webserver的directory,由web1,和web2分但请求,使用random算法,处理静态请求 {.backend = web1;.weight = 2;} #设置权重为2 {.backend = web2;.weight = 5;} } director appserver random { #定义一个名为appserver的directory,由app1,和app2分但请求,使用random算法,处理动态请求 {.backend = app1;.weight = 2;} {.backend = app2;.weight = 5;} } ############定义Acl############## acl purgers { #设置清理缓存的IP "127.0.0.1"; "172.16.10.0"/16; } ############vcl_recv函数段############## sub vcl_recv { #使得后端服务能记录访问者的真实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; } #配置动静分离 if (req.url ~ "\.php$"){ set req.backend = appserver; #php结尾的交给appserver服务器组处理,否则交给webserver服务器组处理 }else{ set req.backend = webserver; } #不正常的访问不缓存 if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } if (req.request != "GET" && req.request != "HEAD") { /* We only deal with GET and HEAD by default */ return (pass); } #不缓存认证信息和Cookie if (req.http.Authorization || req.http.Cookie) { /* Not cacheable by default */ return (pass); } #定义清楚缓存IP,调用上面的Acl if (req.request == "PURGE"){ #使用PURGE命令清除缓存 if(!client.ip ~ purgers){ #非ACl定义的IP,则不能清除缓存 error 405 "Method not allowed"; } return (lookup); } #支持压缩功能 if (req.http.Accept-Encoding) { if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { # No point in compressing these remove req.http.Accept-Encoding; } else if (req.http.Accept-Encoding ~ "gzip") { set req.http.Accept-Encoding = "gzip"; } else if (req.http.Accept-Encoding ~ "deflate") { set req.http.Accept-Encoding = "deflate"; } else { remove req.http.Accept-Encoding; } } } ############vcl_hit函数段############## sub vcl_hit { if (req.request == "PURGE"){ #请求方法是PURGE,这清理缓存 purge; error 200 "Purged"; } } ############vcl_miss函数段############## sub vcl_miss { if (req.request == "PURGE"){ purge; error 404 "Not in cache"; } } ############vcl_pass函数段############## sub vcl_pass { if (req.request == "PURGE"){ error 502 "PURGE on a passed object"; } } ############vcl_fetch函数段############## sub vcl_fetch { #定义缓存时长 if (req.request == "GET" && req.url ~ "\.html$") { set beresp.ttl = 300s; #超时时长为300秒 if (req.request == "GET" && req.url ~ "\.(png|xsl|xml|pdf|ppt|doc|docx|chm|rar|zip|bmp|jpeg|swf|ico|mp3|mp4|rmvb|ogg|mov|avi|wmv|swf|txt|png|gif|jpg|css|js|html|htm)$") { set beresp.ttl = 600s; } return (deliver); } } ############vcl_deliver函数段############## sub vcl_deliver { #定义Header标识,判断缓存是否命中 if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; #命中则返回HIT } else { set resp.http.X-Cache = "MISS"; #未命中则返回MISS } }
3、4启动Varnish服务
/etc/init.d/varnish start
相关文章推荐
- WindowManager.LayoutParams的属性
- [BZOJ 3144]切糕
- 1102. Invert a Binary Tree (25)
- java定时任务 Timer等
- 永久登录的实现
- 【c++版数据结构】单链表复习之常见面试题型1
- outlook无法检索到日历忙闲信息
- 最大子数组问题
- 哪些老鸟程序员知道而新手不知道的小技巧?
- 测试文章
- [xxx respondsToSelector:]message sent to deallocated instance和空地址崩溃 空指针
- jQuery学习心得之一:(function($){...})(jQuery)
- 使用安卓Camera类完成视频截图功能
- JAVA注释
- 微信事件推送接口(原创总结)
- jq 京东跳楼效果
- HTML基础
- 谢博文的啊啊
- pch文件配置
- js实现页面跳转的五种方法推荐