概述
Brotli是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模,由Google在2015年推出,专门针对Web资源内容进行优化
Brotli的压缩率比gzip高,根据不同的研究,Brotli可以比gzip节省14%-25%的文件大小13。这意味着Brotli可以更快地传输数据,提高网站的加载速度和用户体验。
Brotli有11个压缩级别,而gzip只有9个。Brotli还使用了一个预定义的120千字节字典,包含了超过13000个常用单词、短语和其他子字符串1。这些因素都有助于Brotli提高压缩效率。
Brotli的压缩时间会随着压缩级别的增加而增加,而gzip的压缩时间相对较稳定。这意味着Brotli需要更多的计算能力,可能会增加服务器的负载和成本13。
Brotli只能与HTTPS一起使用,而gzip可以同时支持HTTP和HTTPS。这也导致了Brotli在浏览器支持上比gzip少,目前除了IE和Opera Mini之外,其他主流浏览器都已支持Brotli。
如果你使用的是的官方包管理器安装的 nginx,可能没有预编译好的 Brotli 压缩模块。不过你可以通过以下步骤手动编译并安装 Brotli 压缩模块:
我的系统环境是debian 10
软件源安装的nginx 版本 1.22
1. 安装编译工具和依赖项
sudo apt update
sudo apt install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip git
2. 下载 Brotli 源码
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
3. 下载 Nginx 源码
我用的是1.22版本
wget http://nginx.org/download/nginx-1.22.0.tar.gz
4. 编译 nginx 并加载 Brotli 模块
cd nginx-1.22.0
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
我们只要他编译完成的 .so
文件就可以了,所以直接用的 make modules
--with-compat
是一个 Nginx 编译选项,它允许 Nginx 模块与不同版本的 Nginx 一起编译和链接,以确保模块在不同版本的 Nginx 中的兼容性。
编译完成后在nginx 源码目录下,会有个objs
目录里面就有2个.so
文件了
把.so
文件复制到nginx的模块路径
ngx_http_brotli_filter_module.so
ngx_http_brotli_static_module.so
- Ubuntu/Debian 系统上的 nginx 模块文件通常被安装到
/usr/lib/nginx/modules
目录下。
- CentOS/RHEL 系统上的 nginx 模块文件通常被安装到
/usr/lib64/nginx/modules
目录下。
5.nginx 配置brotli
打开nginx配置文件
vim /etc/nginx/nginx.conf
添加以下两行
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
得放在pid 下面这个位置 nginx -t
配置检查才能通过。不知道为什么
开启Brotli
brotli on;
brotli_comp_level 5;
brotli_min_length 256;
brotli_types text/plain text/javascript text/css text/xml text/x-component application/javascript application/x-javascript application/xml application/json application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype image/jpeg image/png image/gif;
Gzip和Brotli可同时开启
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/javascript text/css text/xml text/x-component application/javascript application/x-javascript application/xml application/json application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype image/jpeg image/png image/gif;
建议是在测试机上编译完模块.so 文件,.so文件在拷过来网站服务器上配置,节省资源。