Nginx读书笔记 -- (四)Nginx服务器的Gzip压缩之一
在Nginx配置文件中可以配置GZIP的使用,相关指令可以在配置文件的http块、server块或者location块中设置。
- 由ngx_http_gzip_module模块处理的9个指令
ngx_http_gzip_module模块主要负责gzip功能的开启和设置,对响应数据进行在线实时压缩,该功能主要包含以下主要指令:
gzip on | off; #用于开启或者关闭gzip功能,默认情况下是off,只有on时下面的指令设定才有效。
gzip_buffers number size;
gzip_buffers 32 4k | 16 8k;
用于设定gzip压缩文件使用的缓存空间大小,number指Nginx服务器需要向系统申请缓存空间的个数,size指定每个缓存空间的大小,根据配置Nginx服务器在对响应输出数据进行gzip压缩时需向系统申请number*size大小的空间进行存储压缩数据,默认情况的值为128,其中size的值取系统内存页一页的大小,为4KB或者8KB。
gzip_comp_level level;
gzip_comp_level 1; #默认为1
该指令用于设定gzip压缩程度,包括级别1-9.级别1表示压缩最低,压缩效率最高;级别9表示压缩最高,压缩效率最低,最费时间。
gzip_disable指令针对不同种类客户端发起的请求,可以选择性的开启或者关闭Gzip功能,用于设置一下客户端种类。Nginx服务器在响应这些种类的客户端请求时,不使用gzip功能缓存响应输出数据,其语法结构为:
gzip_disable regex ...; #regex根据客户端的浏览器标志(user-agent,UA)进行设置,支持正则表达式。
gizp_disable MSIE [4-6]\. #该设置使用了正则表达式,可以匹配UC字符串包含MISE4、5、6的所有浏览器,响应时不压缩。
[photos]
[/photos]
[photos]
[/photos]
gzip_http_version指令,早期的一些浏览器或者HTTP客户端,不支持Gzip可能会看到乱码,所以针对不同的HTTP协议版本,需要选择性的开启或者关闭Gzip功能。该指令用于设置开启Gzip功能最低的HTTP协议版本,语法为:
gzip_http_version 1.0 | 1.1; #默认设定为1.1版本。
gzip_min_length指令,gzip压缩对大多数数据的压缩效果明显,但是如果压缩很小的数据,可能出现压缩数据量越大的情况,因此应该根据相应页面的大小,选择性的开启或关闭Gzip功能。该指令用于设置页面的字节数,当响应页面大于该值时,才启用gzip。响应页面的大小通过HTTP响应头部中content-length指令获取,但是如果使用了chunk编码压缩,content-length或不存在或被忽略,该指令无效,语法为:
gzip_min_length length; 默认设定为20,设定为0时表示不管响应页面大小如何都进行压缩,笔者建议设定为1KB或以上,防止出现数据越压缩越大的情况;
gzip_min_length 1024;
gzip_proxied指令在使用Nginx服务器反向代理功能时有效,前提是在后端服务器返回的响应头部中,request部分包含用于通知代理服务器的via头域。
它主要用于设定Nginx服务器是否对后端服务器返回的结果进行gzip压缩,语法为:
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
- off,关闭Nginx服务器对后端服务器返回结果的Gzip压缩,默认设定。
- expired,当后端服务器响应页头部包含用于指示响应数据过期时间的expired头域时,启用对相同数据的gzip压缩。
- no-cache,当后端服务器响应头部包含用于通知所有缓存机制是否缓存时的cache-control头域、且指令值为no-cache时,启用对响应数据的gzip压缩。
- no-store,当后端服务器响应页头部包含用于通知所有缓存机制是否缓存的cache-control头域、且指令值为no-store时,启用对响应数据的gzip压缩。
- private,当后端服务器响应页头部包含用于通知所有缓存机制是否缓存的cache-control头域、且指令值为private时,启用对响应数据的gzip压缩。
- no_last_modified,当后端服务器响应页头部不包含用于指明需要获取数据最后修改时间的last-modified头域时,启用对响应数据的gzip压缩。
- no_etag,当后端服务器响应页头部不包含用于标示被请求变量的实体值得etag头域时,启用对响应数据的gzip压缩。
- auth,当后端服务器响应页头部包含用于标示HTTP授权证书的authorization头域时,启用对响应数据的gzip压缩。
- any,无条件启用对后端服务器响应数据的gzip压缩。
gzip_types指令,服务器可以根据响应页的MIME类型选择性的开启gzip压缩功能。该指令用来设定MIME类型,被设置的类型将被压缩,语法结构为:
gzip_types mime-type ...;
其中,mime-type变量的取值默认为text/html,但是实际上,在gzip指令设定为on是,Nginx服务器对所以的text/html类型页面进行gzip压缩。该变量还可以取“*”,表示对所有MIME类型的页面数据进行gzip压缩,一般情况下我们常规的压缩文件类型设定如下:
gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip_vary指令,该指令用于设定在使用gzip功能时是否发送带有“vary:Accept-Encoding”头域的响应头部。该头域的主要功能时告诉接受方发送的数据经过了压缩处理。开启后效果是响应头部添加了Accept-Encoding:gzip,这个对于本身不支持gzip压缩的客户端浏览器是有用的,语法为:
gzip_vary on | off;
默认设定为off。事实上我们可以通过Nginx配置的add_header指令强制Nginx服务器在响应头部添加vary:accept-encoding头域,以达到相同的效果:
add_header vary accep-encoding gzip;
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »