Nginx gzip压缩模块 ngx_http_gzip_module

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

  ngx_http_gzip_module模块允许使用gzip方式压缩响应内容。这种方式可以有效避免过大的通信内容占用过多的带宽。

  使用SSL/TSL协议时,压缩的响应可能会受到BREACH攻击。

  什么是网站gzip压缩

  正常浏览器通过URI访问服务时,下载的资源都是源文件大小。开启gzip压缩时,服务器在响应之前,对资源进行gzip压缩,并追加Content-Encoding: gzip响应头。浏览器接收响应之后,会检查Content-Encoding响应头,若是gzip,则先对响应进行gzip解压,然后交给浏览器,进行解析及渲染等一系列操作。

  网站gzip压缩的优点

  网站开启gzip以后,会将输出到用户浏览器的数据进行压缩处理,这样会减小通过网络传输的数据量,达到提升网页加载速度、提升用户浏览体验。

  网站开启gzip并非全是优点,gzip压缩算法属于依赖CPU型操作,在服务器端大量的资源进行gzip压缩,会占用服务器CPU和磁盘资源。但对于目前CPU性能来说,其影响微乎其微。

  gzip压缩模块 配置安装

  首次安装Nginx时,切换到Nginx源码目录,执行命令:

./configure

  运行命令后,可能会出现下面的错误提示,说明系统缺少zlib库:
在这里插入图片描述

  安装zlib库使用如下命令即可:

yum install zlib-devel

  接下来继续执行make & make install完成Nginx的安装。详细的安装过程可以参照Nginx 多环境安装与配置

  动态增加 gzip压缩模块

​  本人Nginx首次安装时,使用./configure --without-http_gzip_module跳过了gzip的配置和安装,所以现在需要动态增加gzip压缩模块。

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

cd /securitit/nginx-1.19.3
./configure

  配置完成后,执行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压缩模块 语法及语义

  gzip

​   语法:gzip on | off;

   语义:启用或禁用响应的gzip压缩。

  gzip_buffers

   语法:gzip_buffers number size;

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

  gzip_comp_level

   语法:gzip_comp_level level;

   语义:设置响应的压缩级别,level的取值范围是1到9。

  gzip_disable

​   语法:gzip_disable regex …;

   语义:禁用对带有"User-Agent"头字段匹配任何指定正则表达式的请求的响应的gzip压缩。

  gzip_http_version

   语法:gzip_http_version 1.0 | 1.1;

​   语义:设置压缩响应所需的最低HTTP版本请求。

  gzip_min_length

   语法:gzip_min_length length;

   语义:设置将被压缩的响应的最小长度。长度仅由“Content-Length”响应头字段确定。

  gzip_proxied

   语法:gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;

   语义:

   off:禁用所有代理请求的压缩,忽略其他参数。

​   expired:响应头包含"Expires"字段,并且该值具有禁用缓存的值,则启用压缩。

   no-cache:响应头包含"Cache-Control:no-cache",则启用压缩。

   no-store:响应头包含"Cache-Control:no-store",则启用压缩。

   private:响应头包含"Cache-Control:private"字段,则启用压缩。

   no_last_modified:响应头不包含"Last-Modified"字段,则启用压缩。

   no_etag:响应头不包含"ETag"字段,则启用压缩。

   auth:请求头包含"Authorization"字段,则启用压缩。

   any:为所有代理请求启用压缩。

  gzip_types

   语法:gzip_types mime-type …;

​   语义:除了"text/html"之外,指定其他媒体类型的响应进行gzip压缩。特殊值"*"针对所有媒体类型。

  gzip_vary

   语法:gzip_vary on | off;

​   语义:如果启用指令gzip、gzip_static或gunzip,则启用或禁用插入"Vary:Accept-Encoding"响应头字段。

  gzip压缩模块 示例

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

  · 默认配置 不启用gzip

  使用默认nginx.conf,不做任何配置时,通过浏览器(需要注意浏览器缓存)访问http://192.168.20.9/gzip/js/bootstrap.js和http://192.168.20.9/gzip/css/bootstrap.css,结果如下:
在这里插入图片描述

  从上面的结果可以看出,bootstrap.js和bootstrap.css下载的大小与服务器文件大小一致。

  · 开启gzip压缩配置

  在默认nginx.conf基础上进行修改,开启gzip压缩,完整配置如下:

worker_processes  1;

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 on;
            # 压缩的响应的最小长度.以"Content-Length"为准进行比较.
            gzip_min_length 1000;
            # 指定gzip压缩级别为5.
            gzip_comp_level 5;
	    	# 指定支持http协议1.1版本.
            gzip_http_version 1.1;
	    	# 指定expired no-cache no-store private auth时,开启gzip压缩.
            # gzip_proxied expired no-cache no-store private auth;
	    	gzip_proxied any;
	    	# 指定过滤的MIME类型.
            gzip_types text/plain application/javascript text/css;
            
            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,结果如下:
在这里插入图片描述
在这里插入图片描述
  从上面的结果可以看出,响应中多了"Content-Encoding:gzip",bootstrap.js和bootstrap.css的大小都发生了变化。

开启gzip压缩前 开启gzip压缩后
bootstrap.js 69.9KB 14.8KB
bootstrap.css 146.6KB 21.7KB

  gzip对资源的压缩还是比较可观的,但具体压缩率是多少,也难有统一的裁定,与文件类型、文件内容、文件内容重复率等等方面都有关系。

  总结

  一般应用中,基本不会涉及到gzip压缩相关的内容,但是在资源要求稍高的应用中,其是必不可缺的一部分内容。就像本文开头所说那样,在某些场景下,开启gzip压缩,可以更好的为你和客户进行服务。

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

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

猜你喜欢

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