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

转载于:https://blog.51cto.com/mooon/908924

squid配合nginx的gzip压缩的完美解决方案相关推荐

  1. Nginx开启Gzip压缩配置详解

    Nginx开启Gzip压缩配置详解 最近生产上发生了一些问题,原先所有的静态资源文件都是经过gzip压缩的,然而这几天突然都没有压缩了,经过一顿排查,发现是Nginx的配置有问题,借此机会详细了解了N ...

  2. nginx的gzip压缩

    随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术.经过gzi ...

  3. nginx 开启gzip压缩

    一.背景介绍        历史遗留问题,在项目创建初期前端力量薄弱,网站大部分image.js.css与业务应用存放在一起,未上传到CDN中,最终导致网站访问缓慢,经过排查由于静态资源大量消耗带宽. ...

  4. Nginx开启gzip压缩配置参数

    Nginx开启gzip压缩配置参数 场景 图片资源较大,前端页面响应加载时间较长 解决方案 开启nginx的gzip进行资源的压缩,可以达到压缩静态文件大小,提高页面访问速度,节省流量和带宽的效果. ...

  5. 在windows、linux中开启nginx的Gzip压缩大大提高页面、图片加载速度转

    为了降低tomcat服务的压力,把页面上的图片采用windows版的nginx进行加载,由于有些图片比较大,加载特别的慢,所以在nginx中打开了gzip的压缩功能.加载图片的速度快了很多. 通过站长 ...

  6. nginx的gzip压缩功能

    我们在开发网站的时候,应该要考虑到pv,因为pv比较大可能会造成服务器带宽不够用,进而导致用户体验变差. 这个时候我们就可以考虑用nginx的gzip功能. 在nginx中开启gzip压缩功能很简单, ...

  7. Nginx开启gzip压缩解决react打包文件过大

    用create-react-app创建的react应用打包之后的build js有1M之多. 采用gzip打包传输,可以节约70%左右的带宽 nginx采用gzip打包方式 在nginx配置中添加如下 ...

  8. Nginx中Gzip压缩功能的实例配置

    Gzip压缩功能的实例配置 gzip on; #开启gzip功能 gzip_types *; #压缩源文件类型,根据具体的访问资源类型设定 gzip_comp_level 6; #gzip压缩级别 g ...

  9. Nginx 笔记与总结(13)Nginx 的 gzip 压缩

    使用 FireFox(40.0)访问博客园(http://www.cnblogs.com/),观察 http 头信息 请求头信息: Accept-Encoding gzip, deflate 表示浏览 ...

最新文章

  1. flask 使用 SQLAlchemy 的两种方式
  2. 模板匹配,特征点匹配-全
  3. android 市场自动安装软件,Android 应用中跳转到应用市场评分示例
  4. python3对urllib和urllib2进行了重构
  5. MSSQL的多层嵌套查询
  6. 【Unity】11.2 刚体(Rigidbody)
  7. attribute java c_属性别名(Attribute Aliasing)
  8. python之ORM操作
  9. 深入理解HashMap和LinkedHashMap的区别
  10. C语言荣获2019年度最佳编程语言
  11. c语言课程设计物业,C语言课程设计报告--物业管理系统.doc
  12. 201671010406 词频统计软件项目报告
  13. mysql跨服务跨库查询
  14. Exploit-exercises
  15. 2021年全球与中国孕妇防辐射服行业市场规模及发展前景分析
  16. 百分点认知智能实验室:如何打造工业级的机器翻译
  17. “脱离应用开发者的数据库,不会成功”,黄东旭万字长文剖析数据库发展新趋势...
  18. 【mysql】You must reset your password using ALTER USER statement before executing this statement报错处理
  19. GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析
  20. 小米盒子3增强版android tv,2017小米盒子3增强版免费看海量热门大片软件推荐

热门文章

  1. 2020移动apn接入点哪个快_手机推荐:为什么别人的手机4G网总是比你快?这样设置一下,网速立马飙升...
  2. oracle refresh force,千万级表上的物化视图(force模式 ),手动刷新,为何速度奇慢?...
  3. html漂浮在左侧不动,[CSS]CSS练习-悬浮不动侧边栏
  4. 给数组里面的对象添加一个新的数据
  5. axios基础和封装
  6. 【自动驾驶】8. MDC通信架构 + DDS + SOME/IP
  7. 七大排序算法的个人总结(一)
  8. Excel表格数据导入到SQLServer数据库
  9. 涨姿势!北京地铁原来是16条旅游专线
  10. CS231n课程笔记翻译:图像分类笔记(上)