nginx支持对资源压缩传输,经过压缩后的页面大小可以为原本的30%甚至更小,用户浏览体验会快很多。
模块:ngx_http_gzip_module
为提高用户获取响应数据的速度,Nginx服务器可以将响应数据进行gzip压缩,在减小响应数据的大小后再发送给用户端浏览器,相对于使用户浏览Web页面,上述方式显示速度更快。要想启用响应数据gzip压缩功能,需要用户浏览器也支持gzip解压功能,目前大多数浏览器都支持gzip压缩数据的显示。Nginx服务器接收客户端浏览器发送的请求后,通过请求头中的属性字段Accept-Encoding判断浏览器是否支持gzip压缩,对支持gzip压缩的浏览器将发送gzip压缩的响应数据。
模块:ngx_http_gunzip_module
当客户端浏览器不支持gzip压缩时,该模块将压缩的数据解压后发送给客户端。对支持gzip压缩的浏览器不做处理。
模块:ngx_http_gzip_static_module
通常gzip压缩指令都是读取未压缩的文本,在进行动态压缩后把响应数据发送给客户端,该模块可以使Nginx把gzip压缩过的以.gz为后缀的文件或已压缩的响应数据直接发送给客户端。
配置样例如下:
gzip_static always; # 始终发送静态的gzip压缩数据
gunzip on; # 若客户端浏览器不支持gzip压缩数据,则解压后发送
gunzip_buffers 16 8k; # 解压缓冲区大小为128KB
gzip_http_version 1.1; #识别http协议的版本
gzip_proxied any; #做为反向代理时启用
gzip_proxied expired no-cache no-store private auth; # 当被代理的服务器符合条件时, 对响应数据启用gzip压缩
gzip on; # 启用动态gzip压缩功能
gzip_min_length 1k; # 响应数据超过1KB时启用gzip压缩
gzip_buffers 4 16k; # 动态压缩的缓冲区大小是64KB
gzip_comp_level 3; # 压缩级别为3
gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobject image/x-icon; # 对指定的MIME类型数据启用动态压缩
gzip_vary on; # 向前端代理或缓存服务器发送添加“Vary: Accept- Encoding”的响应数据
第三方模块:ngx_brotli
注:这种压缩方式仅支持HTTPS
Brotli是开源的一种新型压缩算法,Brotli压缩比智能压缩性能更好。开启Brotli压缩功能后,会对资源进行智能压缩后返回,缩小传输文件大小,提升文件传输效率,减少带宽消耗。
官网地址:https://github.com/google/ngx_brotli
算法地址:https://github.com/google/brotli
动态加载
wget https://github.com/google/brotli/archive/refs/tags/v1.0.9.tar.gz
wget https://github.com/google/ngx_brotli/archive/refs/tags/v1.0.0rc.tar.gz
tar zxf v1.0.0rc.tar.gz
tar zxf v1.0.9.tar.gz
mv brotli-1.0.9/* /root/ngx_brotli-1.0.0rc/deps/brotli/
./configure --with-compat --add-dynamic-module=/root/ngx_brotli-1.0.0rc
将ngx_http_brotli_filter_module.so
ngx_http_brotli_static_module.so
拷贝到/usr/local/nginx/modules/
复制nginx主程序
配置文件中添加
load_module "/usr/local/nginx/modules/ngx_http_brotli_filter_module.so";
load_module "/usr/local/nginx/modules/ngx_http_brotli_static_module.so";
或静态编译
$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install
配置
brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types application/atom+xml application/javascript application/json application/rss+xml
application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
评论区