Published on
795

nginx配置高性能的gzip压缩

Authors
  • avatar
    Name
    小辉辉
    Twitter

前言

nginx对程序员来说都很熟悉了,前端可以用来当作一个服务器来部署静态资源文件,后端一般用来当作方向代理服务器来使用,将多个服务对外暴露出一个地址来使用。

我作为一个前端开发,和nginx打交道的还是真不少了,就拿这个博客来说就是部署在nginx后面的。

一般来说我们为了提升文件的加载性能都会设置下nginx的缓存配置,首页文件经常由于需要经常更新不缓存,除此之外的js和css还有图片等文件会设置较长的缓存时间,一般是一年。

另外大家都知道页面打开的时间和文件资源加载的大小有很大关系,所以为了减少资源我们常常会开启nginx的gzip配置,一般的js文件还有css文件都会有很明显的压缩效果。

gzip属性分析

这里讲下开启gzip的方式,我们常规用的压缩默认是动态压缩,什么意思呢?就是nginx在接收到外部文件请求时,会先对文件进行一次压缩步骤,等到压缩结束后再将文件返回给客户端。

具体的配置如下:

server {
    gzip on; # 开启
    gzip_buffers 32 4K;
    gzip_comp_level 6; # 压缩等级,数字越大文件越小
    gzip_min_length 100;
    gzip_types application/javascript text/css text/xml;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
}

这里不对每个属性详细讲了,具体可以参考官网的参考地址

一般我们用gzip到这里就会结束了,但是默认的配置会有什么问题呢?那就是每次请求都会执行压缩操作,要知道压缩背后的算法需要大量的cpu计算,所以一旦请求很密集的时候,服务器的cpu必然承受不了这么多的压缩计算,所以针对这个问题nginx就提供了一个静态压缩方案。

静态压缩的主要思想就是在服务器上预设好已经压缩好的文件,这样nginx只需要直接返回这个文件就可以了,一般是以.gz结尾,如果压缩文件不存在,依旧使用原始文件,这样一来nginx就无需再执行压缩操作,这样的话我们的nginx又能扛住大流量了。

开启静态压缩

配置文件同上述动态压缩形式,但是需要额外启用ngx_http_gzip_static_module模块,开启方式:

$ ./configure --prefix=/usr/local/nginx --with-http_gzip_static_module make && make install

通过下面命令确认是否启用成功

$ nginx -V 2>&1| grep -o http_gzip_static_module

输出http_gzip_static_module表示启用成功。

配置说明:

gzip_static  on; # 放在动态压缩参数前面

官网参考地址

结论

一般来说对于固定的文件内容,我们可以通过生成.gz文件结合gzip_static功能来大幅度提升nginx的性能,但是考虑到有些动态生成的内容,例如后端接口返回的数据只能使用动态压缩了。