添加位置:
在默认配置文件(nginx/conf/nginx.conf)中搜gzip,加在对应的位置添加或完善如下配置:
代码如下 | 复制代码 |
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 3; gzip_types text/plain text/xml text/css application/x-javascript application/xml application/xml+rss text/javascript application/atom+xml; gzip_vary off; gzip_disable "MSIE [1-6]."; |
说明:
gzip on; (启用 gzip 压缩功能)
gzip_min_length 1k; (最小压缩的页面)
gzip_buffers 4 16k; (设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流)
gzip_http_version 1.0; (它的默认值是1.1,就是说对HTTP/1.1协议的请求才会进行gzip压缩如果我们使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间是用HTTP/1.0协议通信的)
gzip_comp_level 2; (压缩级别,1压缩比最小处理速度最快,9压缩比最大但处理最慢,同时也最消耗CPU,一般设置为2就可以了)
gzip_types text/plain application/x-javascript text/css application/xml; (什么类型的页面或文档启用压缩)
gzip_vary on; (启用应答头“Vary: Accept-Encoding”,注意,由于一个bug将导致IE 4-6无法缓存内容。)
设置好后,使用
代码如下 | 复制代码 |
./nginx/sbin/nginx -t |
检查配置文件是否有问题,没问题,reload新的配置文件
代码如下 | 复制代码 |
./nginx/sbin/nginx -s reload |
现在测试一下效果如下
curl -I -H "Accept-Encoding: gzip, deflate" "http://www.111cn.net"
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Jul 2012 07:08:04 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: private
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Encoding: gzip
注意:
1. 其中的gzip_http_version的设置,它的默认值是1.1,就是说对HTTP/1.1协议的请求才会进行gzip压缩
如果我们使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间是用HTTP/1.0协议通信的
如果我们使用nginx通过反向代理做Cache Server,而且前端的nginx没有开启gzip
同时,我们后端的nginx上没有设置gzip_http_version为1.0,那么Cache的url将不会进行gzip压缩
2. gzip_disable的设置是禁用IE6的gzip压缩,又是因为杯具的IE6
IE6的某些版本对gzip的压缩支持很不好,会造成页面的假死,今天产品的同学就测试出了这个问题
后来调试后,发现是对img进行gzip后造成IE6的假死,把对img的gzip压缩去掉后就正常了
为了确保其它的IE6版本不出问题,所以就加上了gzip_disable的设置