nginx开启gzip压缩加快网站访问速度

      有很多站长都喜欢把服务器放在国外,这个博客的服务器就位于美国。把站放在国外的好处有很多,例如不需要走国内那套复杂的备案程序,这个就不多说了,水表在门外,呵呵!而且国外很多vps主机的性价比是相当高的,例如本站所用的BudgetVM,512M内存、50GSSD硬盘、每月3TB流量、OPENVZ虚拟化的配置年付只有25刀,按照当前汇率换算成软妹币,每个月大概只需要15元。而在国内的各种云是绝对达不到这个性价比的。

      然而说到国内的访问速度,美国的主机就有些呵呵了,以BudgetVM为例,前两天调整线路,造成我的博客打开十分缓慢,用调试模式一看,卧槽,加载那区区几个js和css都需要5-8秒的时间,等加载完了网页开始渲染,黄瓜菜都凉了!不过对于网站来说,我们可以开启gzip功能,让服务器在传输前先对资源进行压缩,以减少传输时间,提升网页加载速度。

      首先登录你的vps,用你习惯的文本编辑器打开/etc/nginx/nginx.conf,找到官方注释掉的那一行

#gzip on

      把前面的#号去掉,gzip功能就打开了。

      接着我们需要定制gzip的参数,这些参数gzip需要指定的参数如下,直接写在gzip on的原位置下面就行

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";

下面对这些配置进行解释

第一行:这个不说了,gzip的开关。

第二行:指定gzip不压缩的临界值,例如本例中设置为1k,那么对于小于1KB的文件,gzip不会执行压缩操作。

第三行:gzip的缓存大小,一般网站可以照抄,不用改。

第四行:识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,但现在99.99%的主流浏览器都支持gzip解压了,所以不用设这个值,请直接将这一行注释掉!

第五行:gzip的压缩级别,数字越大,压缩出来的文件越小,当然对你的服务器资源消耗就会越大。由于恶劣的网络环境,本站服务器把这个值设置成5,一般网站设置2-4就可以了。

第六行:指定需要压缩的文件类型,这里不能直接写文件扩展名,需要写文件在header中的类型需要写文件在nginx里面定义的mime type,怎么找呢?用winscp登录到服务器,把/etc/nginx/mime.types这个文件下载下来,用notepad++打开参考下就行了。下面贴出我的mime.types供参考,左边是需要写在gzip配置文件里面的文件类型,右边是文件的扩展名。

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg svgz;
    image/webp                            webp;

    application/font-woff                 woff;
    application/java-archive              jar war ear;
    application/json                      json;
    application/mac-binhex40              hqx;
    application/msword                    doc;
    application/pdf                       pdf;
    application/postscript                ps eps ai;
    application/rtf                       rtf;
    application/vnd.apple.mpegurl         m3u8;
    application/vnd.ms-excel              xls;
    application/vnd.ms-fontobject         eot;
    application/vnd.ms-powerpoint         ppt;
    application/vnd.wap.wmlc              wmlc;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/x-7z-compressed           7z;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-perl                    pl pm;
    application/x-pilot                   prc pdb;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            der pem crt;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/xspf+xml                  xspf;
    application/zip                       zip;

    application/octet-stream              bin exe dll;
    application/octet-stream              deb;
    application/octet-stream              dmg;
    application/octet-stream              iso img;
    application/octet-stream              msi msp msm;

    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;

    audio/midi                            mid midi kar;
    audio/mpeg                            mp3;
    audio/ogg                             ogg;
    audio/x-m4a                           m4a;
    audio/x-realaudio                     ra;

    video/3gpp                            3gpp 3gp;
    video/mp2t                            ts;
    video/mp4                             mp4;
    video/mpeg                            mpeg mpg;
    video/quicktime                       mov;
    video/webm                            webm;
    video/x-flv                           flv;
    video/x-m4v                           m4v;
    video/x-mng                           mng;
    video/x-ms-asf                        asx asf;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;
}

其中text/html这个文件类型是不需要指定的,nginx默认就会压缩它,如果你指定了,在nginx检查配置文件的时候会给你报个错。

一般根据网站的实际情况,把css、js、php、jpg、png、bmp、gif等常见的格式压缩一下就好了。

第七行:给http头里面加个vary字段,用于检测客户端浏览器是否支持压缩,没有特殊需求保持on就行了。

第八行:由于IE浏览器1-6跟gzip功能有兼容性问题,所以对于IE1-6不启用gzip加密。然而对于本站来说,由于屏蔽了过时的SSL算法,ie6和以下的浏览器是根本打不开网站的,所以这句写不写问题不大。

      配置完成之后,首先执行nginx -t检查下配置文件的语法,确认没报错之后执行service nginx reload

      最后,启动chrome或者firefox,按F12打开调试模式,点击network选项卡,注意把顶上的disable cache勾上,然后尝试打开你的网站。

gzip-f12

      在加载的资源列表中,点击一个你刚刚指定的文件类型,例如js文件,查看Response Header,如果看到content-encoding:gzip字样,说明gzip启动成功。如果没有看到,检查下是不是这个文件太小,没有达到gzip压缩的临界值。如果完全没看到gzip,那么检查你配置文件是不是写对了。特别是js文件都没有成功开启gzip的,由于javascript文件的类型有多种写法,请一定参考的自己的mime.types文件,不要照抄网上的!

      最后,如果你的网络条件不是属于烂得不要不要的那种类型,你应该可以明显感觉到网站加载速度的提升!

参考资料
http://shitouququ.blog.51cto.com/24569/1161880
https://www.insp.top/article/open-nginx-gzip-module

发表评论

电子邮件地址不会被公开。 必填项已用*标注