随着网站内容不断增加,我们的网站上的内容和功能也变得丰富多彩,这时就会有一个问题出现----我们的网站加载会明显变慢,这对于网站的访客来说可不是一件愉快的事,那么我们该如何优化网站,加快网站的访问速度呢?减少网站的文件内容是不可能了,但我们可以用一种“魔法”把这些文件变小,下面我们便来认识一下这个奇妙的缩小术-----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;

   指令含义:

  1. gzip指令:

    语法:gzip on|off

    默认值:gzip off

    指令用于开启或关闭gzip模块。

  2. gzip_buffers指令:

    语法:gzip_buffers number size

    默认值:gzip_buffer 4 4k/8k

    设置系统获取几个单位的缓存用户存储gzip的压缩结果数据流。例如4 4k代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。4 8k代表以8k为单位,按照原始数据以8k为单位的4倍申请内存。

    如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

  3. gzip_comp_level指令

    语法:gzip_comp_level [1-9]

    默认值:gzip_comp_level 1

    gzip压缩比,1:压缩比最小,处理速度最快,9:压缩比最大但处理速度最慢(传输快但更消耗CPU)。一般设置为3即可。

  4. gzip_min_length指令

    语法:gzip_min_length length

    默认值:gzip+min_length 0

    设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k的可能越压越大。即:gzip_min_length 1024。

  5. gzip_http_version指令

    语法:gzip_http_version 1.0|1.1

    默认值:gzip_http_version 1.1

    识别http的协议版本。由于早期的一些浏览器或http客户端,肯能不支持gzip自解压,用户会看到乱码,所以做一些判断还是有必要的。

  6. 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——无条件启用压缩。

  7. 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;

      ……

    }

  8. gzip_vary on指令

    和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

参考文献:《实战Nginx》