首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Varnish应用小结

2012-09-28 
Varnish使用小结Varnish使用小结?- [技术笔记]2009-02-12 | Tag:varnish?compress?acl?purge?varnishadm版

Varnish使用小结

Varnish使用小结?- [技术笔记]

2009-02-12 | Tag:varnish?compress?acl?purge?varnishadm

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://iyubo.blogbus.com/logs/35085709.html

此日志会随时更新,当然,是随着我的应用积累:)

实现静态文件压缩

Varnish itself does not compress or decompress objects, although that has been on our wish list for quite a while. However, it will operate correctly with backends that support compression.

从官方网站可以得知,Varnish本身并不能提供压缩的功能,但是我们又想要使用压缩,该怎么处理呢?(有关压缩的方面可以参考官方网站http://varnish.projects.linpro.no/wiki/FAQ/Compression)

在vcl_recv中加入如下配置,为Varnish指定压缩算法,提高效率。(Even though there are few possible values for?Accept-Encoding,?Varnish?treats them literally rather than semantically, so even a small difference which makes no difference to the backend can reduce cache efficiency by making?Varnish?cache too many different versions of an object.)

??????? 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 {
??????????????????????? # unkown algorithm
??????????????????????? remove req.http.Accept-Encoding;
??????????????? }
??????? }

在vcl_hash中

sub vcl_hash {
??????? set req.hash += req.url;
??????? if (req.http.Accept-Encoding ~ "gzip") {
??????????????? set req.hash += "gzip";
??????? }
??????? else if (req.http.Accept-Encoding ~ "deflate") {
??????????????? set req.hash += "deflate";
??????? }
??????? hash;
}

这样就把压缩的工作还是交给后端服务器去做

添加一个Header标识是否命中

??????????????????????? error 403 "Not Allowed.";
??????????????? }

对特定URL不缓存

sub vcl_fetch {
??? if (req.request == "GET" && req.url ~ "/test/.*") {
??????? set obj.ttl = 0s;
??? }
??? else {
??????? set obj.ttl = 1800s;
??? }
?? #set??? obj.http.X-Varnish-IP = server.ip;
??? set??? obj.http.Varnish = "Tested by Kevin";
??? insert;
}

清除指定缓存内容

我们可以通过varnishadm这个命令从管理端口进行指定缓存的清除

/usr/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /test/*

/usr/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$ (清除所有缓存)

热点排行