随着网站内容不断增加,我们的网站上的内容和功能也变得丰富多彩,这时就会有一个问题出现----我们的网站加载会明显变慢,这对于网站的访客来说可不是一件愉快的事,那么我们该如何优化网站,加快网站的访问速度呢?减少网站的文件内容是不可能了,但我们可以用一种“魔法”把这些文件变小,下面我们便来认识一下这个奇妙的缩小术-----gzip。
gzip(GNU-ZIP)是一种压缩技术,经过它的压缩,页面大小会缩小到一种可观的比例,它的原理就是在服务器端进行压缩,当压缩后的数据包到达用户端的浏览器时,会进行解压,还原出原来的内容,压缩过程,用户在访问网站时并不会感觉到。所以gzip的压缩需要浏览器和服务器双方面的支持。不过不需要我们担心,因为IE、火狐、Opera、谷歌等绝大多数浏览器都支持解析gzip过的页面。
Nginx的压缩输出由一组gzip压缩指令来实现。gzip压缩输出的相关指令位于http{......}两个大括号之间:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
指令含义:
gzip指令:
语法:gzip on|off
默认值:gzip off
指令用于开启或关闭gzip模块。
gzip_buffers指令:
语法:gzip_buffers number size
默认值:gzip_buffer 4 4k/8k
设置系统获取几个单位的缓存用户存储gzip的压缩结果数据流。例如4 4k代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。4 8k代表以8k为单位,按照原始数据以8k为单位的4倍申请内存。
如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_comp_level指令
语法:gzip_comp_level [1-9]
默认值:gzip_comp_level 1
gzip压缩比,1:压缩比最小,处理速度最快,9:压缩比最大但处理速度最慢(传输快但更消耗CPU)。一般设置为3即可。
gzip_min_length指令
语法:gzip_min_length length
默认值:gzip+min_length 0
设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k的可能越压越大。即:gzip_min_length 1024。
gzip_http_version指令
语法:gzip_http_version 1.0|1.1
默认值:gzip_http_version 1.1
识别http的协议版本。由于早期的一些浏览器或http客户端,肯能不支持gzip自解压,用户会看到乱码,所以做一些判断还是有必要的。
gzip_proxied指令
语法:gzip_proxied[off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any…]
默认值:gzip_proxied off
Nginx作为反向代理的时候使用,开启或关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的header头。
off——关闭所有的代理结果数据的压缩。
experied——启用压缩,如果header头中包含“Expires”头信息。
no_cache——启用压缩,如果header头中包含“Cache-Control:no-cache”头信息。
no-store——启用压缩,如果header头中包含“Cache-Control:no-store”头信息。
private——启用压缩,如果header头中包含“Cache-Control:private”头信息。
no_last_modified——启用压缩,如果header头中不包含“Last-Modified”头信息。
no_etag——启用压缩,如果header头中不包含“ETag”头信息。
auth——启用压缩,如果header头中包含“Authorization”头信息。
any——无条件启用压缩。
gzip_types指令
语法:gzip_types mime-type[mime-type…]
默认值:gzip_types text/html
匹配mime类型进行压缩,(无论是否指定)“text/html”类型总是会被压缩的。
注意:如果作为http server来使用,祝配置文件中要包含文件类型配置文件
http
{
include conf/mime.types;
……
}
如果你希望压缩常规的文件类型,可以把代码写成这样:
http
{
include conf/mime.types;
gzip on;
gzip_mim_length 1000;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
……
}
gzip_vary on指令
和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
参考文献:《实战Nginx》
原文地址:http://liupengfang1015.blog.51cto.com/6627801/1768504