热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Varnish3.0中配置gzip压缩

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


推荐阅读
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 如何在Mozilla Firefox中调整GIF动画的循环次数
    本文介绍了如何通过调整Mozilla Firefox的高级设置来控制GIF动画的播放次数,帮助用户根据个人喜好自定义浏览体验。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
author-avatar
洛特大人_382
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有