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压缩相关的内容,但是在资源要求稍高的应用中,其是必不可缺的一部分内容。就像本文开头所说那样,在某些场景下,开启gzip压缩,可以更好的为你和客户进行服务。
若文中存在错误和不足,欢迎指正!
本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!
标签:
相关文章
-
无相关信息