前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >squid配合nginx的gzip压缩的完美解决方案

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

作者头像
一见
发布2018-08-07 15:07:35
6400
发布2018-08-07 15:07:35
举报
文章被收录于专栏:蓝天蓝天

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了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2009-03-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档