今天准备使用最新的varnish来挡在tomcat前,配置如下,但发现很多图片无法加载,很多链接打开奇慢。麻烦帮我看看varnish的配置。注:所有配置都在同一台机器上。
backend master { .host = "192.168.1.31"; .port = "8080"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } backend slave { .host = "192.168.1.31"; .port = "8080"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } #允许刷新缓存的 ip acl purgeAllow { "127.0.0.1"; } #这里是定义容许监控的 IP,因为我是禁止直接 IP 访问的,有是为了监控需要 acl iplist { "127.0.0.1"; "10.16.6.101"; "192.168.1.31"; } #/acl iplist############################################################## sub vcl_recv { #定义 acl iplist 列表里的 ip 访问主源,也就是监控的 IP if ( client.ip ~ iplist ){ set req.backend = master; } else { if (req.http.host ~ "10.16.6.101" || req.http.host ~ "192.168.1.31" ) { #如果 IP 直接访问,返回 403 error 403; } else { set req.backend = master; } if (!req.backend.healthy) { #如果检测第一个主源挂掉,就访问备源 set req.backend = slave; } } #判断如果不是 acl purgeAllow 定义的 IP if (req.request == "PURGE") { if (!client.ip ~ purgeAllow) { #判断是否允许 ip,如果不是,是不可以刷缓存的,返回 405 error 405 "Not allowed."; } #去缓存中查找 return (lookup); } #首次访问增加 X-Forwarded-For 头信息,方便后端程序获取客户端 ip if (req.restarts == 0) { #如果设置过此 header 则要再次附加上,用,隔开,如果 #只有一层代理的话,就无需设置了 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; } } #至单独服务器下,减少动态应用服务器压力,同时降低 varnishd 的压力 if(req.url ~ "\.(php)$"){ return (pass); } #非正规的请求直接转发给后端服务器 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); } #只处理 GET 和 HEAD 请求,如果你不想缓存 POST 的页面话 if (req.request != "GET" && req.request != "HEAD") { return (pass); } #http 认证的页面也 pass if (req.http.Authorization) { return (pass); } return (lookup); } #/sub vcl_recv############################################################## #管道?按官方文档说的是此模式下请求会原封不动的转交给后端直到连接关闭 sub vcl_pipe { return (pipe); } #/sub vcl_pipe############################################################## #交给后端服务器 sub vcl_pass { return (pass); } #/sub vcl_pass############################################################## #缓存文件名的哈希处理 sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.url); } else { hash_data(server.ip); } return (hash); } #/sub vcl_hit############################################################## #缓存命中后的处理 sub vcl_hit { return (deliver); } #/sub vcl_hit############################################################## #缓存未命中 sub vcl_miss { #更新缓存的请求,提示缓存不存在 Not in cache if (req.request == "PURGE") { error 404 "Not in cache."; } set bereq.url = regsub(req.url, "\?.*", ""); #既然缓存不存在了,就去后端取吧 return (fetch); } #/sub vcl_miss############################################################## sub vcl_fetch { if (beresp.ttl <= 0s || beresp.http.Set-Cookie || beresp.http.Vary == "*") { /* * Mark as "Hit-For-Pass" for the next 2 minutes */ set beresp.ttl = 120 s; return (hit_for_pass); } #404,300 页面不缓存 if (beresp.status == 404 || beresp.status == 300) { error 404; } return (deliver); } #/sub vcl_fetch############################################################## #发送给客户端 sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; #统计命中了多少次 # set resp.http.X-Cache-Hits = obj.hits; } else { set resp.http.X-Cache = "MISS"; } #去掉 varnish 中的一些头信息(如果你不想保留的话,建议保留 Age,方便查看) remove resp.http.X-Varnish; remove resp.http.Via; return (deliver); } #/sub vcl_deliver############################################################## #定义错误页面的信息 sub vcl_error { set obj.http.Content-Type = "text/html; charset=utf-8"; set obj.http.Retry-After = "5"; synthetic {" <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>"} + obj.status + " " + obj.response + {"</title> </head> <body> <h1>Error "} + obj.status + " " + obj.response + {"</h1> <p>"} + obj.response + {"</p> <hr> </body> </html> "}; return (deliver); } #/sub vcl_error############################################################## sub vcl_init { return (ok); } #/sub vcl_init############################################################## sub vcl_fini { return (ok); } #/sub vcl_fini##############################################################
我来结贴吧,问题已经解决: Varnish3安装过程真曲折。最终搞定,pcre源码安装即可。######你这个问题没说清楚,你的意思是说pcre没安装好的问题么 ######应该是pcre没有安装好的原因,我开始是使用了yum安装了rpm包。后来换源码安装就好了。这里有详细的安装过程:http://www.oschina.net/question/222919_57963
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。