【发布时间】:2012-10-07 08:40:17
【问题描述】:
Varnish 会将压缩后的 obj 保存在 Cache 中,但是当客户端不支持 gzip 时。
Varnish 如何处理它?它是否也将其他未压缩的obj保存在Cache中,或者解压缩压缩的obj?
【问题讨论】:
标签: reverse-proxy varnish varnish-vcl
Varnish 会将压缩后的 obj 保存在 Cache 中,但是当客户端不支持 gzip 时。
Varnish 如何处理它?它是否也将其他未压缩的obj保存在Cache中,或者解压缩压缩的obj?
【问题讨论】:
标签: reverse-proxy varnish varnish-vcl
Varnish 3.0 支持 Gzip,如官方教程的"Compression" 章节中所述。对后端的所有 HTTP 请求都将包含对 gzip 内容的请求,因此默认情况下所有对象都存储在 gzip 的内存中。
如果后端不支持gzip,你可以通过在vcl_fetch中设置beresp.do_gzip来让Varnish在存储之前压缩响应。
如果请求来自不支持 gzip 的客户端,Varnish 将在交付之前对存储的对象进行压缩。
【讨论】:
Varnish 2.x 不压缩或解压缩:如果客户端支持 Gzip,它将在缓存中保存页面的 gzip 版本。如果客户端不支持,则会在缓存中放置另一个副本用于纯内容,不进行压缩。
所以是的:根据 Accept-Encoding 标头(应该标准化),对于每个支持的压缩算法,一个页面的多个版本将保存在缓存中。
*更新:为清楚起见进行了编辑,以上仅适用于 Varnish 2.0 或 2.1。 Varnish 3.x 支持 gzip,如上所述。
【讨论】: