Nginx-gzip压缩
nginx 推荐配置
| 1 | gzip on; | 
ngx_http_gzip_module
默认已编译,可通过
--without-http_gzip_module禁用模块。
我们可通过 ngx_http_gzip_module 模块,使用 gzip on; 指令开启 gzip 压缩,实时压缩 http 包体,提升网络传输效率。
Syntax: gzip on | off;
Default: gzip off;
Context: http,server,location, if in location
| 1 | gzip on; | 
指定压缩文件类型,图片类文件本身就自带压缩,再进行压缩提升并不明显。
Syntax: gzip_types mime-type …;
Default: gzip_types text/html;
Context: http,server,location
| 1 | gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml; | 
指定压缩文件的最小字节数,当小于此字节数时不进行压缩。
Syntax: gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location
| 1 | gzip_min_length 1k; | 
通过设置正则规则,表明哪些 User-Agent 头不使用 gzip 压缩。
Syntax: gzip_disable regex …;
Default: —
Context: http, server, location
| 1 | # 禁用IE 1-6 gzip | 
指定压缩的 http 版本,默认:http_version: 1.1 才启用压缩处理。
Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location
是否压缩上游的响应
Syntax: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
Default: gzip_proxied off;
Context: http, server, location
- off- 不压缩来自上游的响应
 
- expired- 如果上游响应中含有 Expires 头部,且其值中的时间与系统时间比较后确定不会缓存,则压缩响应
 
- no-cache- 如果上游响应中含有 Cache-Control头部,且其值含有no-cache值,则压缩响应。
 
- 如果上游响应中含有 
- private- 如果上游响应中含有 Cache-Control头部,且其值含有private值,则压缩响应
 
- 如果上游响应中含有 
- no_last_modified- 如果上游响应中没有 Last-Modified头部,则压缩响应
 
- 如果上游响应中没有 
- no_etag- 如果上游响应中没有 ETag头部,则压缩响应
 
- 如果上游响应中没有 
- auth- 如果客户端请求中含有 Authorization头部,则压缩响应
 
- 如果客户端请求中含有 
- any- 压缩所有来自上游的响应
 
配置缓冲区大小
Syntax: gzip_buffers number size;
Default: gzip_buffers 32 4k|16 8k;
Context: http, server, location
压缩率等级,1-9,1:压缩速度最快,压缩率最低。
Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http, server, location
是否在响应中返回 Vary: Accept-Encoding。
Syntax: gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location
变量
- 压缩率 $gzip_ratio
如何确定是否成功开启?
| 1 | [root@codezm ~]# curl -I "http://127.0.0.1/src/js/jquery.min.js" | 
响应头中有 Vary 参数,证明已开启 gzip 压缩。
ngx_http_gzip_static_module
默认未编译,需在
configure时增加--with-http_gzip_static_module参数。
在启用 gzip 压缩后,因需要对 body 做压缩处理所以无法使用 sendfile 零拷贝技术。可通过 ngx_http_gzip_static_module 模块,它将检索请求文件相对路径下有没有同名 .gz 文件,有时将直接响应此文件。
Syntax: gzip_static on | off | always;
Default: gzip_static off;
Context: http, server, location
配置文件中增加 gzip_static on; 指令,开启此模块,还需要在访问文件相对目录下创建同名 .gz 压缩文件。
| 1 | [root@codezm js]# tar -zcvf jquery.min.js.gz jquery.min.js | 
如何确定是否成功开启?
| 1 | [root@codezm ~]# curl -I -H "Accept-Encoding: gzip, deflate" "http://127.0.0.1/src/js/jquery.min.js" | 
响应头中 Content-Length: 30939 大小与文件压缩后大小一致。
在使用 tar -zcvf 压缩文件后,发现浏览器并不能对压缩后文件正常解压并解析。而使用 gzip 命令压缩后则正常,文件也更小了。
| 1 | [root@codezm js]# gzip jquery.min.js | 
ngx_http_gunzip_module
默认未编译,需在
configure时增加with-http_gunzip_module参数。
若服务器上仅存在 *.gz 压缩文件,没有源文件,且客户端不支持 gzip 压缩,可在配置文件中添加 gunzip on; 指令开启此模块。
- 当客户端不支持 gzip压缩时,将在解压后再返回响应。
- 若客户端支持 gzip压缩,则直接输出.gz文件。
Syntax: gunzip on | off;
Default: gunzip off;
Context: http, server, location
Syntax: gunzip_buffers number size;
Default: gunzip_buffers 32 4k|16 8k;
Context: http, server, location
 
       
        