今天突然想到纷印好像一直都还没有对服务器的返回做gzip压缩,服务器访问速度最近又一直被各种诟病,于是决定倒腾一下,毕竟这个对服务器访问速度影响还是挺大的。
首先,在网上查怎么开启gzip,方法真是形形色色,有php开的,有node开的,也有apache或者nginx开的,稍微选了一下,便决定在nginx里面做,感觉又不容易出错,还免得各个部分的代码都得改~~~
综合了一下网上查到的资料,最后得到的配置如下:
gzip on; gzip_disable "msie6"; gzip_min_length 1k; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.0; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript text/x-component image/bmp;
其中gzip_disable是把对IE6不开启gzip压缩(兼容性不好),虽说现在本来就不会支持IE6了,但强迫症,还是感觉禁了舒坦点;
gzip_min_length是设置了会开启gzip压缩的文件大小最小值,太小了压缩似乎容易越压越大;
gzip_vary和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩;
gzip_proxied是根据某些请求和应答来决定是否在对代理请求的应答启用压缩;
gzip_comp_level是设置压缩的级别,从1-10,越大压缩率越高,也自然对CPU的消耗越大,按个人喜好设置就好;
gzip_buffers设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流,16 8k代表按照原始数据大小以8k为单位的16倍申请内存;
gzip_http_version是设置了会开启gzip压缩的HTTP请求的最低版本号,默认1.1,需要注意的是做反向代理的时候,代理服务器与真是主机之间的通讯是采取的HTTP 1.0,所以如果配置的不好可能反向代理的时候就没有压缩了;
gzip_types是设置需要进行gzip压缩的文件的类型,按照MIME来设置,无论是否设置,都会对text/html进行压缩,然后这里没有对大部分图片进行压缩,因为图片一般本身都是已经压缩了的,再做gzip意义不大(在google的图片优化建议中也看到有提到几个图片压缩软件),当然,BMP是个例外,不过想来网站上也基本不会出现BMP的。
配置好压缩后,测了一下,果然效果显著,有个1.2M的pdfjs直接给压到了265K,简直爽。然后又拿百度的页面优化建议跑了下,结果发现静态内容缓存也木有,于是乎,果断趁热打铁,又找了下nginx开启静态文件缓存,最后得到配置如下:
location ~ .(ico|gif|bmp|jpg|jpeg|png|swf|mp3|flv)$ { expires 1d; } location ~ .(js|css)$ { expires 1h; }
这样把图片视频神马的和js、css给分开设置缓存时长,因为感觉js、css还是设置的时间短点的好,毕竟还是很有可能会改动的,尤其是我们这边用的AngularJS,好像显示的各个元素都是js动态生成的……
不过缓存配置比较不爽的是,似乎得在每一个server配置里面单独配,不能在server外面统一配,也不知道是不是我打开方式不对,不过好在只有前端要配,后端不需要,这样要改的量直接少了一半……
这就是今天下午配服务器的成果了,至少现在看起来效果还是不错的,感觉网站的访问速度确实是快了不少,以后看来弄服务器的时候,上来先得把这些东西配好了。