gzip(GNU -ZIP)
是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%设置更小。现在浏览器都支持gzip压缩,在HTTP请求中发送一行
"Accept-Encoding: gzip, deflate", 这时候Nginx 服务器可以输出经过gzip
压缩后的页面给浏览器,浏览器再解压。
这可以将网络线路上传输的大量数据消减60%以上,不仅节省了服务器的带宽,也加速了单位数据传输速率,加速了用户的下载体验!!!
Nginx 服务器通过ngx_http_gzip_module 模块、ngx_http_gzip_static_module 模块和ngx_http_gunzip_module 模块对这些指令进行解析和处理。
ngx_http_gzip_module 模块处理的9个指令:
gzip on | off;
gzip_buffers 32 4k | 16 8k;
gzip_comp_level 2 ;
gzip_disable "MSIE[1-6]\.";
gzip_http_version 1.0 | 1.1;
gzip_min_length 1024;
gzip_proxied
gzip_types
gzip_vary on | off;
ngx_http_gzip_static_module 模块用来搜索和发送经过Gzip功能预压缩的数据,如果客户端请求的数据在之前被压缩过,且客户端浏览器支持Gzip压缩,就直接返回压缩后的数据。处理的指令:
gzip_static on | off | always;
ngx_http_gunzip_module 模块用来对不支持Gzip压缩数据处理的客户端浏览器,对压缩数据进行解压处理的。处理的2个指令:
gunzip_static on | off ;
gunzip_buffers 32 4k | 16 8k;
gzip 压缩指令位于 http{...} 两个大括号之间:
http {
gzip on
# 开启gzip 功能
gzip_min_length 1000; # 响应页数据上限
gzip_buffers 4 8k;
# 缓存空间大小
4 个空间 , 每个空间大小 8k
gzip_comp_level 2; # 压缩级别为2 。 级别从1-9,1 压缩程度最低,效率高,9 压缩程度最高,压缩效率最低
gzip_http_version 1.1;
# 开启Gzip功能的最低http 协议版本
gzip_types text/plain application/x-javascript text/css application/xml; # 压缩源文件类型
gzip_vary on ; # 启用压缩标识,告诉接收方发送的数据经过了压缩处理, Vary:Accept-Encoding:gzip
gzip_static on ; # 检查预压缩文件
gzip_disable "MSIE[1-6]\."; # 当客户端浏览器是IE 1-6 时 不使用Gzip压缩, ie6 对 Gzip 支持不太好
}
Nginx 与其他服务器交互时Gzip 压缩功能的注意:
1、 对于多层服务器的系统来说,Nginx 服务器作为前端服务器如果开启了Gzip压缩功能,后端服务器最好就不要开启了,否则会导致客户端浏览器在刷新过程中数据下载不完整的问题发生。
2、Squid 服务器通常被用作Web 缓存服务器,3.0版之前的Squid 服务器 对 http 1.1 的 支持 不是特别
完善,它仅支持静态压缩,要求HTTP响应头中必须包含Content-length 头域, 不能使用 Chunked 编码, 但 Nginx 使用
ngx_http_gzip_module 模块实现Gzip 压缩功能情况居多,该模块默认使用 Chunked
编码进行动态压缩,于是就导致了问题。
这就要 开启 Nginx 的 ngx_http_gzip_static_module 模块的功能:
gzip_static on;
gzip_http_version 1.0;
add_header Vary Accept-Encoding Gzip;