压缩静态资源
Gzip
1、在 Nginx 配置文件中,通过配置 gzip,压缩静态资源
2、相关指令可以配置在 http 块、server 块、location 块
3、解析、处理指令的模块
(1)ngx_http_gzip_module
(2)ngx_http_gzip_static_module
(3)ngx_http_gunzip_module
ngx_http_gzip_module
1、该模块会在 nginx 安装时,内置到 nginx 安装环境中
2、gzip
(1)开启 / 关闭 gzip 功能
(2)语法
gzip on|off;
(3)默认值
gzip off;
(4)位置:http、server、location
3、gzip_types
(1)根据响应页的 MIME 类型,选择性地开启 Gzip 压缩功能
(2)语法
gzip_types mime-type……;
(3)默认值
gzip_types text/html;
(4)位置:http、server、location
(5)所选值可从 mime.types 文件中查找,也可以使用 * 代表所有
4、gzip_comp_level
(1)设置 Gzip 压缩程度
(2)级别:1 ~ 9,1 表示压缩程度最低,压缩效率最高,9 表示压缩程度最高,但效率最低
(3)语法
gzip_comp_level level;
(4)默认值
gzip_comp_level 1;
(5)位置:http、server、location
5、gzip_vary
(1)设置使用 Gzip 进行压缩,发送是否携带 Vary:Accept-Encoding 头域的响应头部,告知接收方,所发送的数据经过 Gzip 压缩处理
(2)语法
gzip_vary on|off;
(3)默认值
gzip_vary off;
(4)位置:http、server、location
6、gzip_buffers
(1)处理请求压缩的缓冲区数量、大小
(2)语法
gzip_buffers number size;
(3)默认值
gzip_buffers 32 4k|16 8k;
(4)位置:http、server、location
(5)number:指定 Nginx 服务器向系统申请缓存空间个数
(6)size:每个缓存空间的大小
(7)该值的设定一般和服务器的操作系统有关,所以建议此项不设置,使用默认值即可
7、gzip_disable
(1)针对不同种类客户端发起的请求,可以选择性地开启 / 关闭 Gzip 功能
(2)语法
gzip_disable regex……;
(3)位置:http、server、location
(4)regex:根据客户端的浏览器标志(user-agent)设置,支持使用正则表达式
(5)指定的浏览器标志不使用 Gzip,该指令一般是用来排除一些明显不支持 Gzip 的浏览器
8、gzip_min_length
(1)针对传输数据的大小,可以选择性地开启 / 关闭 Gzip 功能
(2)语法
gzip_min_length length;
(3)默认值
gzip_min_length 20;
(4)位置:http、server、location
(5)单位:不填写:字节;k | K:千字节;m | M:兆
(6)Gzip 压缩功能对大数据的压缩效果明显,但是如果要压缩的数据比较小,可能出现越压缩数据量越大的情况
(7)可以通过头信息中的 Content-Length,获取响应页面的大小
(8)若使用 Chunk 编码动态压缩,该指令将被忽略
(9)建议设置为 1K 或以上
9、gzip_proxied
(1)设置是否对服务端返回的结果进行 Gzip 压缩
(2)语法
gzip_proxied off| expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any;
(3)默认值
gzip_proxied off;
(4)位置:http、server、location
(5)off:关闭 Nginx 服务器对后台服务器返回结果的 Gzip 压缩
(6)expired:启用压缩,如果 header 头中包含 Expires 头信息
(7)no-cache:启用压缩,如果 header 头中包含 Cache-Control:no-cache 头信息
(8)no-store:启用压缩,如果 header 头中包含 Cache-Control:no-store 头信息
(9)private:启用压缩,如果 header 头中包含 Cache-Control:private 头信息
(10)no_last_modified:启用压缩,如果 header 头中不包含 Last-Modified 头信息
(11)no_etag:启用压缩,如果 header 头中不包含 ETag 头信息
(12)auth:启用压缩,如果 header 头中包含 Authorization 头信息
(13)any:无条件启用压缩
ngx_http_gunzip_module
1、一个过滤器,用于为不支持 gzip 编码方法的客户端,解压缩具有 "Content-Encoding: gzip" 的响应
2、当需要存储压缩数据以节省空间并降低 I/O 成本时,该模块将非常有用
3、默认情况下不构建此模块,应使用 --with-http_gunzip_module 配置参数启用它
4、gunzip
(1)为缺少 gzip 支持的客户端,启用或禁用 gzip 响应的解压缩
(2)如果启用,则在确定客户端是否支持 gzip 时,还会考虑以下指令:gzip_http_version、gzip_proxied、gzip_disable、gzip_vary
(3)语法
gunzip on | off;
(4)默认值
gunzip off;
(5)位置:http、server、location
5、gunzip_buffers
(1)设置用于解压缩响应的缓冲区的数量和大小
(2)默认情况下,缓冲区大小等于一个内存页:4K 或 8K,具体取决于平台
(3)语法
gunzip_buffers number size;
(4)默认值
gunzip_buffers 32 4k|16 8k;
(5)位置:http、server、location
Gzip、sendfile
1、共存问题
(1)开启 sendfile 后,读取磁盘上的静态资源文件时,可以减少拷贝的次数,不经过用户进程,将静态文件通过网络设备发送
(2)Gzip 对资源压缩,需要经过用户进程进行操作
2、解决:ngx_http_gzip_static_module 模块的 gzip_static
(1)ngx_http_gzip_static_module 模块允许发送文件扩展名为 .gz 预压缩文件,而不是常规文件
(2)默认情况下不构建此模块,应使用 --with-http_gzip_static_module 配置参数启用它
3、添加 ngx_http_gzip_static_module 模块
(1)备份 nginx 目录下的 nginx 二进制文件
cd /usr/local/nginx/sbin
mv nginx nginxold
(2)进入 Nginx 安装文件目录,使用 configure 配置参数
./configure --with-http_gzip_static_module
(3)编译
make
(4)将 objs 目录下的 nginx 二进制执行文件,移动到 nginx 目录下的 sbin 目录中
(5)执行更新命令
make upgrade
4、gzip_static
(1)接到请求后,到 url 相同的路径的文件系统,查找扩展名为 .gz 的同名文件
(2)语法
gzip_static on | off | always;
(3)默认值
gzip_static off;
(4)位置:http、server、location
(5)on / off:检查客户端是否支持 Gzip
(6)always:在所有情况下都会使用压缩文件,不检查客户端是否支持,如果磁盘上没有未被压缩的文件,或者 ngx_http_gunzip_module 模块被启用,这个参数非常有用
Brotli
1、比 Gzip 更高效,与 Gzip 共存
2、当浏览器支持 Brotli,则优先使用
3、支持动态编译安装
(1)Nginx 模块:https://github.com/google/ngx_brotli
(2)算法:https://github.com/google/brotli
(3)解压,算法的所有目录移动到 ngx_brotli/deps/brotli 下
(4)进入 Nginx 源码目录
(5)配置
./configure --with-compat --add-dynamic-module=/path/to/ngx_brotli
(6)编译模块
make modules
(7)编译模块将在 objs 目录中产生 ngx_http_brotli_filter_module.so 和 ngx_http_brotli_static_module.so,将两者复制到 nginx 目录下的 modules 中
(8)将 load_module 指令添加到 nginx.conf(在 http 块上方)
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
(9)将 objs 目录下的 nginx 二进制执行文件,移动到 nginx 目录下的 sbin 目录中
(10)更新
make upgrade
合并请求
1、nginx-http-concat
(2)https://github.com/alibaba/nginx-http-concat
2、工作流程
(1)客户端发送一个请求,获取多个静态资源,如 .css、.js
(2)服务端读取请求、静态资源,合并静态资源,并以流的形式传输
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战