上一篇 下一篇 分享链接 返回 返回顶部

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

发布人:Minchunlin 发布时间:2021-03-03 09:08 阅读量:2123

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%,我们可以根据自己的喜好使用许多选项,例如显示预压缩或静态内容,降低压缩级别以及关闭即时压缩。

目录结构
全文