蒙面人生蒙面人生

开启nginx的gzip-ngx_http_gzip_static_module

今天无事,看到猫的lnmp安装脚本,里面的nginx安装里面有with-http_gzip_static_module ,于是乎也来测试一下自己的是否开启了gzip,通过测试,一些站(静态)开启,一些(动态)没开启,这就奇怪了,看nginx.conf都是开启了的.于是网上搜索资料,得到以下信息:
在搭建squid网页加速的时候,对于大的css 或者js要进行压缩,然后再进行缓存,这样能够提高减小下载量提高页面响应速度。如果你用的是squid 3.0以前的版本并且用的是 ngnix server的话可能会碰到如下问题: 不用squid直接打开页面则客户端返回的是压缩的状态,如果启用squid加速会发现下载下来的页面不是压缩状态。这里面主要是没有启动ngnix 的静态缓存模块(ngx_http_gzip_static_module)导致。
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。
1.nginx编译选项
./configure --with-http_gzip_static_module
2.修改nginx.conf
gzip_static on;

gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6] \.";
gzip_vary on;

我又发现了一个问题,就是squid的cache保存问题。按照文档上说,squid是根据url来缓存对象的。
也就是说,一个url应该只保留一个cache。如果你交替的申请压缩的和不压缩的内容,是会出现反复MISS的 ...
如果打开了broken_vary_encoding,就可以同时保存两份cache了。

本原创文章未经允许不得转载 | 当前页面:蒙面人生 » 开启nginx的gzip-ngx_http_gzip_static_module

评论