如何在Nginx服务器中启用Brotli压缩

Brotli压缩是一种通用的压缩技术,在各浏览器中得到广泛支持。它与目前可用的压缩方法相当,因为它提供了20-26%更好的压缩比。尽管如此,除非web服务器使用Brotli算法发送基于文本的压缩资源,否则它是没有用的。
在本文中,我们将学习压缩在服务器中的工作原理,以及为什么它有用?我们还将学习安装Nginx服务器,让我们的服务器提供Brotli压缩文件。
服务器压缩兼容性很重要
每当我们从浏览器下载一个文件时,浏览器会通过一个头向服务器请求它支持什么样的压缩方式。例如,如果浏览器支持gzip和deflate解压。它会在它的Accept-Encoding,头中加入这些选项,即。
Accept-Encoding="deflate,gzip"
因此,不支持这些格式的浏览器将不会在头中包含这些格式。当服务器响应内容时,它会通过一个头(Content-Encoding)告诉浏览器压缩格式。因此,如果它支持gzip,那么头看起来像这样。
Content-Encoding="gzip"
支持Brotli压缩的浏览器(如Firefox)和安装了Brotli模块的webserver的头像是这样的。
Accept-Encoding="deflate, gzip, br"
Content-Encoding="gzip, br"
因此,如果浏览器利用了最好的压缩格式,而Web服务器没有利用,那就不好了,因为Web服务器不会用首选的压缩算法发回文件。这就是为什么要为Web服务器安装压缩模块的原因。
服务器安装
在继续进行Brotli配置之前,我们将设置Nginx服务器。在此之前,先用sudo apt-get更新你的Ubuntu发行版,然后在bash终端输入以下命令。
sudo apt-get update
sudo apt-get install nginx -y
sudo service nginx start
为了在Nginx中启用Brotli压缩,我们将根据Nginx的版本信息编译.so模块。如图所示,输入以下命令将输出Nginx版本。
nginx -v
使用wget命令和你的nginx版本信息一起从Nginx网站下载源代码。
wget https://nginx.org/download/nginx-1.18.0.tar.gz

我们将使用该源码来编译*.so二进制文件用于Brotli压缩。现在用下面的命令解压文件。
tar xzf nginx-1.18.0.tar.gz
Brotli模块配置
现在Google已经发布了Nginx的Brotli模块。我们将从Google资源库中git克隆该模块。
git clone https://github.com/google/ngx_brotli --recursive.
我们将cd到nginx-1.18.0文件夹中配置动态Brotli模块。
cd nginx-1.18.0/
sudo ./configure --with-compat --add-dynamic-module=../ngx_brotli
注意:在配置时,您可能会收到以下错误信息。

在这种情况下,运行以下命令来安装pcre库
sudo apt-get install libpcre3-dev -y
模块编译
我们将使用make命令在nginx-1.18.0目录下创建一个模块文件夹。
sudo make modules
我们使用cp命令将ngx_http_brotli * .so文件从nginx-1.18.0 / objs文件夹复制到modules文件夹。
cd /nginx-1.18.0/objs/
sudo cp <strong> ngx_http_brotli * .so </ strong> / usr / share / nginx / modules
现在,使用ls命令列出文件的内容。您会注意到它包含两个不同的模块文件,即:
ls ngx_http_brotli * .so
ngx_http_brotli_filter_module.so
ngx_http_brotli_static_module.so
常规Brotli模块: ngx_http_brotli_filter_module.so模块动态压缩所有文件,因此需要更多的计算资源
静态Brotli模块: ngx_http_brotli_static_module.so模块允许它提供预压缩的静态文件,从而减少了资源消耗。
现在,使用您喜欢的编辑器打开/etc/nginx/nginx.conf文件,添加Brotli加载模块以开始Brotli配置,方法包括以下几行:
sudo vim /etc/nginx/nginx.conf#
# Load module section
load_module "modules/ngx_http_brotli_filter_module.so";
load_module "modules/ngx_http_brotli_static_module.so";
我们还将包括配置文件夹路径/etc/nginx/conf.d/*.conf
和/usr/share/nginx/modules/*.conf在上述文件中,例如:
http {
# Include configs folders
include /etc/nginx/conf.d/*.conf;
include /usr/share/nginx/modules/*.conf;
}
要添加Brotli配置,请打开/etc/nginx/conf.d/brotli.conf
在vim编辑器中添加文件并通过设置以下配置指令来启用Brotli:
brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_types application/rss+xml application/xhtml+xml
text/css text/plain;
“ brotli off | on ”值启用或禁用内容的动态或动态压缩。
' brotli_static on'使Nginx服务器可以检查是否存在带有.br扩展名的预压缩文件。我们也可以将此设置更改为关闭选项或始终启用。将始终值允许服务器发送预压缩的内容不确认浏览器是否支持与否。由于Brotli占用大量资源,因此该模块最适合减少瓶颈情况。
“ brotli_comp_level 6 ”指令将动态压缩质量级别设置为6。其范围可以从0到11。
最后,为特定的MIME类型启用动态压缩,而text / html响应始终被压缩。该指令的默认语法是brotli_types [mime type]。您可以在Github上找到有关配置指令的更多信息。
保存更改,通过键入“ sudo service restart nginx”重新启动Nginx服务,这一切都已完成。
更改之后,您会注意到性能指标方面的一些明显改进。但是,它确实有一个高峰时段CPU负载增加的轻微缺陷。为避免这种情况,请注意CPU使用率。如果它定期达到100%,我们可以根据自己的喜好使用许多选项,例如显示预压缩或静态内容,降低压缩级别以及关闭即时压缩。