在nginx中与网页压缩相关的模块有两个:HttpGzipModule和HttpGzipStaticModule。前者用于启用在文件传输过程中使用gzip压缩,而后者的作用是将一个文件以压缩的方式传递到一个支持压缩功能的客户端之前,首先检查是否已经存在相应的*.gz结尾的文件名格式,这样避免重复压缩而造成资源浪费。
对于nginx的网页压缩传输在nginx中的配置是将其分到两种模式:一种是动态的,实时压缩输出(边压缩边输出),另一种是静态的,找到同名文件的.gz格式文件就输出。
启用gzip功能需要引用zlib库
一、HttpGzipModule
HttpGzipModule 用于在文件传输过程中启用gzip压缩,压缩率通过变量$gzip-ratio来设定。
1、配置示例
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_type text/plain application/xml;
gzip_disable "MSIE [1-6]\.";
2、指令
HttpGzipModule提供了以下两条指令。
指令名称: gzip
语法:gzip on|off
使用环境:http,server,location,location中的if区段
功能:启用或者禁用gzip压缩功能。
指令名称:gzip_buffers
默认值:gzip_buffers 4 4k/8k
使用环境,http,server,location
功能:该指令用于指定存放被压缩相应的缓冲的数量和大型。如果没有设置大小,那么一个缓冲的小写等于一个页码的大小,具体页码的大小毅力阿玉所在系统平台,不是4KB就是8KB。获取系统内存页码的大小方法很简单:
[root@mb_comp ~]# getconf PAGE_SIZE
4096
指令名称:gzip_comp_level
语法:gzip_comp_level 1..9
默认值:gzip_comp_level 1
功能:该指令用于设定压缩级别,可以设定的级别从1~9,1是最小的压缩率,也是最快的。占用CPU资源最少;9是最大压缩率,也是最慢的,占用CPU资源最大。
指令名称:gzip_disable
语法:gzip_disable regex
使用环境:http,server,location
功能:可以通过该指令对一些特定的用户代理不使用压缩功能,就可以使用正则表达式,但这需要PCRE的支持。该指令从0.6.23以后才开始提供。从nginx0.7.63版本后,可以使用“msie6”来进制对IE5.5 和IE6的压缩,而“SV1”(Service Pack2)将会被忽略。
例如:gzip_disable "msie6";
指令名称:gzip_http_version
语法:gzip_http_version 1.0|1.1
默认值:gzip_http_version 1.1
使用环境:http,server,location
功能:该指令用于决定对指定的HTTP请求协议版本进行压缩或者不压缩,其依赖于客户端的HTTP请求的版本。当使用HTTP1.0协议是,Vary:Accept-Encoding头没有设置,这样会导致代理缓冲腐化(corruption),因此可以考虑使用add_header指令来添加它。同时也要注意到,无论使用gzip的哪个版本,Content-Length头都没有设置。使用1.0版本是,Keepalive将会无效,而1.1版本将会有chunked传递处理。
注意:该指令的默认值1.1,但是在某些抓取访问(例如CDN)中可能会有问题,因此根据需要可以将其改为1.0
指令名称:gzip_min_length
语法: gzip_min_length length
默认值:gzip_min_length 0
使用环境:http,server,location
功能:该指令用于设置响应体的最小长度,单位为字节。如果响应体的长度低于指定的值,那么就不使用压缩。长度的决定从“Conten-Length”头获取。
指令名称:gzip_proxied
语法:gzip_proxied [off|expire|no-cache|no-store|private|no_last_modified|no_etag|auth|any]…
默认值:gzip_proxied off
使用环境:http,server,location
功能: 该指令用于设置启用或禁用从代理服务器上收到的响应体gzip压缩功能。该指令接受下列参数,有些可以组合使用。
- off/any: 对所有的请求启用/禁用压缩功能。
- expired:如果Expires header阻止缓冲,那么启用压缩。
- no-cache/no-store/private:如果Cache-Control header 被指使为no-cache,no-store或者private,则启用压缩。
- no_last_modified:加入Last_Modified header没有设置,则启用压缩
- no_etag:假如Etag header 没有设置,则启用压缩
- auth: 假如设置了Authorization header,则启用压缩
指令名称:gzip_types
语法:gzip_types mime-type [mime-type]
默认值: gzip_types text/html
使用环境:http,server,location
功能:该指令用于设定除了默认的text/html MIME类型外,对其他的那些MIME类型也启用压缩功能。(匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的)
指令名称:gzip_vary
语法:gzip_vary on|off
默认值:gzip_vary off
使用环境:http,server,location
功能:该指令用于设定是否相应数据包添加Vary:Accept-Enconding HTTP头(header)。
需要注意的而是,由于bug的原因,如果设置添加该头,你们会导致IE4~6不缓存内容。
指令名称:gzip_window
语法:gzip_window size (允许范围 521 1k 2k 4k 8k 16k 32k)
默认值 :MAX_WBITS,来源于Zlib库
使用环境:http,server,location
功能:该指令用于gzip操作的窗口(window)缓冲的大小(windowBits参数)。该指令所使用的值是由zlib库调用的功能。
指令名称:gzip_hash
语法:gzip_hash size
默认值:MAX_MEM_LEVEL ,来源于Zlib库
使用环境:http,server,location
功能:该指令用于设置分配给内部压缩状态(memlevel参数)的内存总数。该指令所使用的值是有Zlib库调用的功能。
指令名称:postpone_gzipping
语法:postpone_gzipping size
默认值:0
使用环境:http,server,location
功能:在开始进行gzip压缩前定义一个最小的数据门槛(threshold)
指令名称:gzip_no_buffer
语法:gzip_no_buffer on|off
默认值:off
使用环境:http,server,location
功能:默认情况下,在将数据发送到客户端之前nginx会等待,直到至少一个缓存(有gzip_buffers定义)被数据填满。如果开启该指令,那会禁用缓存。
二、HttpGzipStaticModule
Ngx_http_gzip_static_module 从Nginx.0.6.24版本开始提供,但是在默认安装中它是不会被变音安装的,在编译时需要指定--with-http_gzip_static_module选项。
指令名称:gzip_static
语法:gzip_static
默认值:gzip_static off
使用环境:http,server,location
功能: 用于启用HttpGzipStaticModule。需要注意的是,确定压缩版本和非压缩版本的时间戳要匹配,以便更新的内容。