环境
系统: Ubuntu 20.04.1 LTS
内存: 2G Ram
CPU: 3v Cores
Brotli简介
Brotli是基于LZ77算法的一个现代变体。
rotli最初发布于2015年,用于网络字体的离线压缩。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。新版本还展现了跨平台的性能改进,以及减少解码所需的内存。
与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。
使用brotli取代deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。使用Brotli进行流压缩的内容编码类型已被提议使用”br”。需要注意的是,只有在启用HTTPS的情况下,浏览器才会发送”br”这个Accept-Encoding。
参考源自维基百科。
编译安装
源环境配置
环境所用操作系统为Ubuntu,使用apt作为包管理工具。默认环境已经安装Nginx,因此不多写Nginx的安装。
配置源码
首先需要编辑apt sourcelist。
vim /etc/apt/sources.list
取消文件中deb-src的注释,这样才能获取软件包源码。最终文件应该类似如下所示:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ focal-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ focal-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ focal universe
deb-src http://us.archive.ubuntu.com/ubuntu/ focal universe
deb http://us.archive.ubuntu.com/ubuntu/ focal-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ focal-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ focal multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ focal multiverse
deb http://us.archive.ubuntu.com/ubuntu/ focal-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ focal-updates multiverse
修改完成以后重新同步软件包列表:
apt update && apt upgrade && apt install dpkg-dev
下载nginx的源码和编译依赖:
apt source nginx && apt build-dep nginx
下载完成后在当前目录新建一个Nginx-[Version]的目录,这个就是Nginx的目录。
下载Brotli
Brolti需要从谷歌的仓库克隆下来,目前暂时没有编译好的二进制包使用。执行以下代码递归克隆Beotli和子模块:
git clone https://github.com/google/ngx_brotli.git && cd ngx_brotli && git submodule update --init
此时的目录结构应该如下所示:
├── nginx-<VERSION>/
│ └── ...
└── ngx_brotli/
└── ...
编译Brotli
编译比较简单,因为我们只需要Brolti作为Nginx的模块使用,所以只需要模块方式编译。记得将[version]替换为你的版本。
cd nginx-[version] && ./configure --with-compat --add-dynamic-module=../ngx_brotli && make modules
安装Brotli
编译完成以后就只需要拷贝到Nginx的模块安装目录。
cp ./objs/*.so /usr/share/nginx/modules
配置Brolti
在上述步骤完成后,Brotli已经安装到Nginx模块中了,仅剩下的步骤是启用它。
添加Config
vim /usr/share/nginx/modules-available/mod-http-brotli.conf
添加如下两行:
load_module "modules/ngx_http_brotli_filter_module.so";
load_module "modules/ngx_http_brotli_static_module.so";
保存并退出。此时还需要做一件事就是去/etc/nginx
目录下建立软连接。
cd /etc/nginx/modules-enabled && ln -s /usr/share/nginx/modules-available/mod-http-brotli.conf 50-mod-http-brotli.conf
配置Nginx启用Brotli
vim /etc/nginx/conf.d/brotli.conf
填入以下内容:
# Enable Brotli
brotli on;
brotli_static on;
brotli_comp_level 6;
# File types to compress
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;
配置完成,重启Nginx就好了。
本文地址: Nginx添加Brotli支持