环境

系统: 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就好了。

说点什么
支持Markdown语法
在"Nginx添加Brotli支持"已有1条评论
Loading...