Nginx gzip压缩扩展模块 ngx_http_gunzip_module ngx_http_gzip_static_module

欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!

  关于gzip压缩,除了ngx_http_gzip_module模块外,还提供了两个扩展模块ngx_http_gunzip_module和ngx_http_gzip_static_module,分别完善gzip的功能缺失。

  ngx_http_gunzip_module

  为不支持"gzip"编码方式的客户端解压缩头"Content-Encoding:gzip"提供的过滤器。

  说的通俗一点,就是为某些不支持gzip压缩的浏览器提供的,如果浏览器不支持gzip压缩文件的话,用gunzip这种方式来解决即可。

  Nginx默认未构建此模块,需要使用–with-http_gunzip_module配置使用它。

  ngx_http_gzip_static_module

  预读gzip功能,允许发送.gz扩展名文件进行响应。

  预读gzip功能,实际是减轻服务器压力、提高应用性能的一种方式。将静态自己预先进行gzip压缩,压缩后文件存储在源文件同级目录下,例如:index.html目录下同时存储index.html.gz。此时,若访问index.html,Ngnix会首先访问index.html.gz,index.html.gz存在的话,直接返回index.html.gz,如果index.html.gz不存在,则转而访问index.html。

  由于预先进行了gzip压缩,省去了服务器对资源进行gzip压缩的过程,可以减少服务响应时间以及服务器CPU的消耗。预读gzip并非只此一种实现,还有一种实现是代理层缓存,可以达到一样的效果。但无论哪种方式,预读都只针对静态资源,因为动态资源是无法预读的。

  Nginx默认未构建此模块,需要使用–with-http_gzip_static_module配置使用它。

  ngx_http_gunzip_module ngx_http_gzip_static_module 配置

  首先切换到Nginx源码目录,运行./configure --with-http_gunzip_module --with-http_gzip_static_module命令。

cd /securitit/nginx-1.19.3
./configure --with-http_gunzip_module --with-http_gzip_static_module

  配置完成后,执行make命令,但切记,不要执行make install命令。

make

  编译完成后,将nginx执行文件复制到/usr/local/nginx/sbin/下(/usr/local/nginx/是Nginx的默认安装目录),复制之前,最好将nginx备份。

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-default
cp /securitit/nginx-1.19.3/objs/nginx /usr/local/nginx/sbin/nginx

  通过上面的步骤,已成功将ngx_http_addition_module模块增加到已安装的Nginx中。

  gzip压缩扩展模块 语法及语义

  gunzip(ngx_http_gunzip_module)

   语法:gunzip on | off;

   语义:为不支持gzip编码方式的客户端提供启用或禁用gzip的功能。在启用时,会参考gzip_http_version、gzip_proxied、gzip_disable,进行权衡后,确认是否开启gzip功能。

  gunzip_buffers(ngx_http_gunzip_module)

   语法:gunzip_buffers number size;

   语义:设置用于解压缩响应的缓冲区的number和size。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。

  gzip_static(ngx_http_gzip_static_module)

   语法:gzip_static on | off | always;

   语义:启用或禁用检查预压缩文件的存在。还会综合gzip_http_version、gzip_proxied、gzip_disable、gzip_vary进行权衡。

  ngx_http_gunzip_module 示例

  随着技术的发展和更新迭代,gzip也几乎成为主流浏览器的标准,很少有浏览器不支持gzip,ngx_http_gunzip_module模块的应用几率就变的很小。

  ngx_http_gunzip_module的配置很简单,只需要在location级别加入如下配置即可:

location / {
    # 开启gunzip功能.
    gunzip on;
    # 设置gunzip使用的缓冲区大小,默认值根据平台差异决定.
    gunzip_buffers 32 4k;
    
    ......
}

  ngx_http_gzip_static_module 示例

  随着网络应用的普及,应用的用户量和访问量的爆发,实际服务器的压力一直是亟待解决的问题,但是从来没有一种银弹可以一劳永逸,这需要在不同的细微方面,对服务器进行调优,各方面协调使得服务器性能达到最佳。

  ngx_http_gzip_static_module模块关注的是gzip开启后对服务器性能的损耗,可以有效的减少服务器CPU的损耗。

  为演示效果,在/usr/local/nginx/html/下新建如下目录结构,其中存放了bootstrap的js和css文件:

在这里插入图片描述
  使用’gzip -r 文件名’对bootstrap.css、bootstrap.min.css、bootstrap.js、bootstrap.min.js进行压缩,压缩后源文件都被压缩成为.gz文件,压缩后目录结构如下:

在这里插入图片描述
  在默认nginx.conf基础上增加ngx_http_gzip_static_module模块指令:

worker_processes  1;

error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
	    # 开启预读gzip功能.
	    gzip_static on;
	    # 配置无论任何情况都使用,不去判断任何头信息.
	    gzip_proxied any;

            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

  在浏览器访问http://192.168.20.9/gzip/js/bootstrap.js或http://192.168.20.9/gzip/css/bootstrap.css,可以正常访问,并返回文件内容:

在这里插入图片描述

  总结

  在系列博客Nginx gzip压缩模块 ngx_http_gzip_module中介绍了如何对网站设置gzip压缩,其压缩完全是每次的服务器行为,会增加服务器压力,加大服务器CPU损耗。

  其实,对于静态资源(如js、css、图片、字体)等文件,由于其在业务上变动几率很小,更加适合使用ngx_http_gzip_static_module进行静态压缩处理,gzip_static能达到与gzip同样的效果,在服务器CPU损耗方面更少。

  现在应用几乎都是通过自动化的方式编译、打包、部署,对于这样的工作流程,gzip_static可能更加容易的集成到项目生命周期中,省去人工成本。

  若文中存在错误和不足,欢迎指正!

本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/securitit/article/details/109112395