squid配合nginx的gzip压缩的完美解决方案
来源:互联网 发布:js压缩工具 编辑:程序博客网 时间:2024/06/16 01:38
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不支持常见的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的(压缩的和不压缩的)。
也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的情况的。
但是我实际测试的过程中,发现不是这样的,交替的申请压缩的和不压缩的内容,是会一直HIT的。这说明squid是同时保存两份cache的(压缩的和不压缩的)。
如果打开了broken_vary_encoding,就可以同时保存两份cache了。
- squid配合nginx的gzip压缩的完美解决方案
- nginx+squid+gzip压缩解决方案
- nginx的gzip压缩功能的配置
- nginx和squid配合搭建的web服务器前端系统
- Nginx和Squid配合搭建的Web服务器前端系统
- nginx和squid配合搭建的web服务器前端系统
- 启用nginx 的gzip压缩功能
- 开启Nginx的gzip压缩功能详解
- nginx启用gzip压缩的示例
- 开启Nginx的gzip压缩功能详解
- 开启Nginx的gzip压缩功能详解
- Nginx gzip对json数据的压缩
- Nginx 开启Gzip压缩的方法
- 16.Nginx 服务器的 gzip 压缩
- tomcat和nginx的gzip压缩
- nginx的一个配置,nginx gzip压缩,nginx静态缓存,nginx负载均衡,nginx限制ip
- Nginx 开启Gzip压缩的方法(非…
- nginx的gzip压缩功能参数介绍(ngx_http_gzip_module)
- Linux中/proc目录下文件详解
- Rsync完全配置
- 如何让所有的后台程序(daemons)都可以产生core dumps文件?
- bash 环境中的常见特殊符号
- How to force setuid program to make a core dump
- squid配合nginx的gzip压缩的完美解决方案
- log4cxx编译方法
- Linux系统中使用GCC CPU参数优化代码编译
- iftop 查看你的网卡流量
- 使用异步I/O大大提高应用程序的性能
- Linux中的tty与pts
- 探索 Linux 内存模型
- Linux学习总结—内存分段和分页管理
- Makefile和automake中判断CPU位数