squid配合nginx的gzip压缩的完美解决方案-阿里云开发者社区

开发者社区> 一见蓝天> 正文

squid配合nginx的gzip压缩的完美解决方案

简介: Squid3.0之前,一直不能完美支持http1.1。所以对gzip内容的支持,始终有很多问题。我也看过很多帖子,号称解决了这个问题。但是其实一直没有把问题说清楚。我今天试着把问题的原因和解决方法彻底说清楚。
+关注继续查看
Squid3.0之前,一直不能完美支持http1.1。所以对gzip内容的支持,始终有很多问题。我也看过很多帖子,号称解决了这个问题。但是其实一直没有把问题说清楚。我今天试着把问题的原因和解决方法彻底说清楚。

squid不支持常见的gzip压缩的原因,有以下两点:

1,  squid只支持gzip的静态压缩,不支持动态压缩。具体一点说,就是response header里必须有content-length, 不可以用chunked方式。

2,  response header中必须有Vary : Accept-Encoding

只要具备以上几点,squid就可以完美的识别压缩和不压缩的内容。

下面说一下nginx针对这个问题的解决方案:

nginx默认的NginxHttpGzipModule, 采用的是chunked方式的动态压缩,而squid是不支持的。需要使用http_gzip_static_module这个模块,进行pre-compress。

具体方法如下:

ngx_http_gzip_static_module was introduced in nginx 0.6.24. You must enable support at compile time:



    ./configure --with-http_gzip_static_module ...

配置文件写法:

    gzip             on

    gzip_static on;

    gzip_http_version   1.0;
    gzip_proxied        any;
    gzip_disable        "MSIE [1-6]\.";

    gzip_comp_level     9;



注意,这里没有加入gzip_vary on;。这是因为http_gzip_static_module这个模块,只给没压缩的内容加入了vary header,而不是所有内容都加。
所以不能打开这个参数。可以在nginx.conf中手动设置vary header。这样不管压缩与否,返回的文件都会被加上Vary: Accept-Encoding。

至此,nginx的gzip压缩,就能够被squid完美支持了。如果你使用Http1.0,就会返回你没压缩的内容。如果你使用http1.1,并且发送Accept-Encoding:gzip,deflate,就会返回压缩后的内容。


PS: 我又发现了一个问题,就是squid的cache保存问题。按照文档上说,squid是根据url来缓存对象的。
      也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的情况的。
      但是我实际测试的过程中,发现不是这样的,交替的申请压缩的和不压缩的内容,是会一直HIT的。这说明squid是同时保存两份cache的(压缩的和不压缩的)。
squid是根据url来缓存对象的。
      也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的情况的。
      但是我实际测试的过程中,发现不是这样的,交替的申请压缩的和不压缩的内容,是会一直HIT的。这说明squid是同时保存两份cache的(压缩的和不压缩的)。
如果打开了broken_vary_encoding,就可以同时保存两份cache了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ECS使用体验
我进行了两周的ECS云服务器的使用
23 0
“飞天加速计划·高校学生在家实践”免费云服务器使用感想
通过这次的云服务器ECS的使用,我收获颇丰,第一次将项目放到了服务器上进行访问,通过阿里云ECS这个云服务器的使用让我更容易认识到云服务器的优势,云服务器ECS远远超过与虚拟机,拥有了一台云服务器后,我不禁想到如何才能够利用好这台服务器,给我的生活带来更多便捷和乐趣。带着这个目标,我开始广泛地了解服务器的原理和应用。在计算机网络世界中,相比个人电脑,服务器发挥了更加关键的作用,它响应用户们的请求并进行处理,为丰富多彩的互联网默默付出,贡献着自己的资源。阿里云ECS云服务器,相当于一个远程电脑,较于本地来说,可以方便我们处理更多的事请,对于我们来说不仅仅是时间上的节省,更多的是本地内存的大大优化
33 0
ECS使用体验
初次使用ECS,成功部署一个基于flask框架的新闻聚合项目在云服务器上。
22 0
后端缓存的23个关键关注点(3)
后端缓存的23个关键关注点(3)
5 0
后端缓存的23个关键关注点(1)
后端缓存的23个关键关注点(1)
3 0
后端缓存的23个关键关注点(2)
后端缓存的23个关键关注点(2)
4 0
试用报告
使我从小白到稍微熟悉所学项目,阿里云YYDS
4 0
+关注
一见蓝天
擅长面向对象设计、C++程序开发,在金山和华为呆过,互联网从业十多年,有分布式计算和存储系统经验。
589
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载