首页->正文

Varnish3.0中对gzip的支持

2011-07-12 -Web开发 标签: 缓存 varnish

varnish3.0之前的版本是根据客户端是否支持gzip,从后端获取压缩或未压缩的内容。如果不在vcl_hash中进行单独设置,还会导致发送给不支持压缩的客户端压缩过的数据,导致乱码。而这次3.0改进后已经完全支持压缩,并根据客户端自动进行解压。

varnish3.0下载地址
https://www.varnish-cache.org/releases/varnish-cache-3.0.0

先看下日志记录
1 未经过varnish代理的页面访问
支持压缩
192.168.56.1 - - [12/Jul/2011:19:13:54 +0800] "GET / HTTP/1.1" 200 98 
"-" "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0" "-"

用curl模拟不支持压缩
192.168.56.1 - - [12/Jul/2011:19:15:03 +0800] "GET / HTTP/1.1" 200 1338
 "-" "curl/7.21.6 (i386-pc-win32) libcurl/7.21.6 OpenSSL/0.9.8q zlib/1.2.5" "-"

可以看到获取的内容长度分别是98Bytes和1338Bytes

2 经过varnish代理后的后端访问
支持压缩
127.0.0.1 - - [12/Jul/2011:19:18:23 +0800] "GET / HTTP/1.1" 200 98 
"-" "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0" "192.168.56.1"

用curl模拟不支持压缩
127.0.0.1 - - [12/Jul/2011:19:19:52 +0800] "GET / HTTP/1.1" 200 98 "-"
 "curl/7.21.6 (i386-pc-win32) libcurl/7.21.6 OpenSSL/0.9.8q zlib/1.2.5" "192.168.56.1"

这次看到返回的内容长度都是98Bytes

varnishlog中的请求内容如下
12 TxHeader b User-Agent: curl/7.21.6 (i386-pc-win32) libcurl/7.21.6 OpenSSL/0.9.8q zlib/1.2.5
...
12 TxHeader b Accept: */*
...
12 TxHeader b Accept-Encoding: gzip


而curl发送请求时,header中是不包括“Accept-Encoding: gzip”的。所以,当varnish请求后端时会自动为不支持gzip的客户端增加“Accept-Encoding: gzip”,同时在varnish发送给客户端时再进行解压缩:
11 TxHeader c Server: nginx
...
11 TxHeader c Transfer-Encoding: chunked
...
11 Gzip     c U D - 87 1338 80 80 632

U D - 87 1338 80 80 632
U代表Gunzip,解压文件
D代表Deliver,分发内容
详细gzip日志说明见https://www.varnish-cache.org/docs/trunk/reference/vsl.html#gzip-records
同时从访问日志中看到,这次更新已经默认支持Transfer-Encoding: chunked方式。

另外varnish配置文件中的vcl_hash方法也做了语法变更,直接使用hash_data即可:
sub vcl_hash {
     hash_data(req.url);
     if (req.http.host) {
         hash_data(req.http.host);
     } else {
         hash_data(server.ip);
     }
}

相关链接
其他更新:http://blog.xcir.net/index.php/2011/07/vcl-and-parameter-changes-in-varnish-cache-3-0/里面的pdf文件(这个博客介绍varnish挺多的,不过是日语的,看不懂……);
当然还有官方的文档:http://varnish-cache.org/trac/browser/doc/changes.rst,里面有详细的更新日志。

再提下3.0中新增的VMODs: https://www.varnish-cache.org/docs/trunk/reference/vmod.html,可以编写varnish的扩展模块;
自带的标准模块功能:https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html

下一篇 配置Varnish支持多个后端域名

上一篇 编写web服务器学Python之Fastcgi

相关文章

nginx代理简单应用

php增加Last-Modified为何无效

Varnish安装配置和使用

配置Varnish支持多个后端域名

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com