免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7991 | 回复: 4

[proxy] squid配合nginx的gzip压缩的完美解决方案(原创并测试通过) [复制链接]

论坛徽章:
0
发表于 2008-12-08 23:16 |显示全部楼层
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的(压缩的和不压缩的)。

原帖: http://zys.8800.org/?p=267

[ 本帖最后由 zysno1 于 2008-12-8 23:34 编辑 ]

论坛徽章:
0
发表于 2008-12-09 21:30 |显示全部楼层
[PS: 我又发现了一个问题,就是squid的cache保存问题。按照文档上说,squid是根据url来缓存对象的。
      也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的情况的。
      但是我实际测试的过程中,发现不是这样的,交替的申请压缩的和不压缩的内容,是会一直HIT的。这说明squid是同时保存两份cache的(压缩的和不压缩的)。]
我不认为是这样的
我认为在squid里面 压缩和没压缩的文件,只要url一样 etag一样,就会被认为是同一个对象:)

论坛徽章:
0
发表于 2008-12-10 21:59 |显示全部楼层
原帖由 gogo407 于 2008-12-9 21:30 发表
[PS: 我又发现了一个问题,就是squid的cache保存问题。按照文档上说,squid是根据url来缓存对象的。
      也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的 ...


如果打开了broken_vary_encoding,就可以同时保存两份cache了。

论坛徽章:
0
发表于 2009-01-06 11:06 |显示全部楼层
目前正遇到一个客户squid我们的网站有问题

论坛徽章:
0
发表于 2010-12-06 11:03 |显示全部楼层
mark 一下,好使!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP