Como ativar a compactação de brotli em nginx

Como ativar a compactação de brotli em nginx

A compactação de Brotli é uma técnica de compressão genérica amplamente suportada entre os navegadores. É comparável aos métodos de compressão atualmente disponíveis, pois oferecem 20-26% melhores índices de compressão. No entanto, não é bom, a menos que o servidor da web esteja enviando recursos baseados em texto compactados com o algoritmo Brotli.

Neste artigo, aprenderemos como a compressão funciona no servidor e por que é útil? Também aprenderemos a instalar o servidor nginx e fazer com que nosso servidor forneça arquivos compactados Brotli.

Fundo

Técnicas/algoritmos de compressão melhoram o desempenho do site, reduzindo o tamanho do conteúdo. Portanto, os dados compactados levam uma carga baixa e tempo de transferência. No entanto, tem um preço. Os servidores utilizam muitos recursos computacionais para fornecer uma melhor taxa de compressão. Portanto, melhor, o caro. Portanto, é adicionado muito esforço para melhorar os formatos de compressão enquanto utiliza ciclos mínimos de CPU.

Até agora, o formato de compressão mais potencial foi gzipped. Recentemente, o GZIP é substituído por um novo algoritmo de compressão conhecido como brotli. É um algoritmo avançado de compressão composto por codificação Huffman, o algoritmo L77 e modelagem de contexto. Por outro lado, o GZIP é construído no algoritmo de deflate.

O formato de compressão sem perdas, projetado pelo Google, está intimamente relacionado ao esvaziar formato de compressão. Ambos os métodos de compactação usam janelas deslizantes para referência de volta. O tamanho da janela deslizante Brotli varia de 1 kb a 16 MB. Por outro lado, o GZIP tem um tamanho de janela fixa de 32kb. Isso significa que a janela de Brotli é 512 vezes maior que a janela esvaziada, o que não é relevante, pois os arquivos de texto maiores que 32 kb raramente estão nos servidores da web.

A compatibilidade de compressão do servidor é importante

Sempre que baixamos um arquivo do navegador, o navegador solicita ao servidor que tipo de compactação ele suporta através de um cabeçalho. Por exemplo, se o navegador suportar gzip e Esflada para descomprimir. Ele adicionará essas opções em seu Aceitar o codificação, cabeçalho, i.e.,

Aceitar-coding = ”Deflinar, Gzip”

Portanto, os navegadores que não suportam esses formatos não os incluirão no cabeçalho. Quando o servidor responde com o conteúdo, ele informa ao navegador sobre o formato de compressão através de um cabeçalho, Codificação de conteúdo. Portanto, se apoiar o GZIP, o cabeçalho se parece com o seguinte:

Content-coding = "gzip"

Cabeçalhos dos navegadores como o Firefox que suportam a compactação de Brotli e o servidor da web que possuem um módulo Brotli instalado para parecer estes:

Aceitar-coding = ”Deflinar, Gzip, Br”
Content-coding = "gzip, br"

Portanto, se o navegador utilizar o melhor formato de compressão e o servidor da web não, não é bom, pois o servidor da web não enviará os arquivos com o algoritmo de compactação preferido. É por isso que é importante instalar o módulo de compressão para o servidor da web.

Instalação do servidor

Antes de avançar com a configuração do Brotli, configuraremos nosso servidor nginx. Antes disso sudo Atualização APT-Get Sua distribuição e digite ubuntu nos seguintes comandos em seu terminal Bash.

ubuntu@ubuntu: ~ update APT-Get Apt-Get
ubuntu@ubuntu: ~ $ sudo apt -get install nginx -y
ubuntu@ubuntu: ~ $ sudo serviço nginx start

Para ativar a compressão de brotli no Nginx, compilaremos nosso .Então, módulos de acordo com os detalhes da versão nginx. Como mostrado, digitando o seguinte comando produzirá a versão nginx:

ubuntu@ubuntu: ~ $ nginx -v
Versão nginx: nginx/1.18.0 (Ubuntu)

Use o wget comando junto com o seu detalhe da versão nginx para baixar o código -fonte do site nginx.

ubuntu@ubuntu: ~ $ wget https: // nginx.org/download/nginx-1.18.0.alcatrão.gz
--2021-02-07 02: 57: 33-- https: // nginx.org/download/nginx-1.18.0.alcatrão.gz
Resolvendo nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2A05: D014: EDB: 5702 :: 6,…
Conectando -se ao nginx.org (nginx.org) | 3.125.197.172 |: 443… conectado.
Solicitação HTTP enviada, aguardando resposta… 200 ok
Comprimento: 1039530 (1015K) [Aplicação/Octet-Stream]
Economizando para: 'nginx-1.18.0.alcatrão.gz '
nginx-1.18.0.alcatrão.gz 100%[================================================ ====================>] 1015k 220kb/s em 4.8s
2021-02-07 02:57:38 (212 kb/s)-'nginx-1.18.0.alcatrão.GZ 'salvo [1039530/1039530]

Usaremos este código -fonte para compilar *.Então, binários para compactação de brotli. Agora extraia o arquivo usando o seguinte comando.

ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.alcatrão.gz

Configuração do módulo Brotli

Agora, o Google lançou o módulo Brotli para Nginx. Vamos clonear o módulo do repositório do Google.

ubuntu@ubuntu: ~ clone git https: // github.com/google/ngx_brotli -recursiva.

Vamos cd no nginx-1.18.0 Pasta para configurar o módulo Brotli dinâmico.

ubuntu@ubuntu: ~ $ cd nginx-1.18.0/
ubuntu@ubuntu: ~ $ sudo ./configure ---with-compat --add-dinâmico-module =… /ngx_brotli

Nota: Você pode receber o seguinte erro ao configurar

./Configurar: Erro: o módulo reescrita http requer a biblioteca PCRE.
Você pode desativar o módulo usando--without-http_rewrite_module
opção ou instale a biblioteca PCRE no sistema ou construa a biblioteca PCRE
Estaticamente da fonte com o nginx usando ---with-pcre = opção.

Nesse caso, execute o seguinte comando para instalar a biblioteca PCRE

ubuntu@ubuntu: ~ $ sudo apt-get install libpcre3-dev -y

Compilação do módulo

Vamos usar o fazer comando para criar um módulos pasta dentro do nginx-1.18.0 diretório.

ubuntu@ubuntu: ~ $ sudo faz módulos

Nós usamos o cp comando para copiar ngx_http_brotli*.então arquivos do nginx-1.18.0/Objs pasta para a pasta dos módulos.

ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/
ubuntu@ubuntu: ~ $ sudo cp ngx_http_brotli*.então /usr/share/nginx/módulos

Agora liste o conteúdo dos arquivos usando o ls comando. Você notará que consiste em dois arquivos de módulo diferentes, eu.e.:

ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.então
ngx_http_brotli_filter_module.então
ngx_http_brotli_static_module.então
  • Módulo Brotli regular: O ngx_http_brotli_filter_module.Portanto, o módulo comprime todos os arquivos em tempo real e, portanto, requer mais recursos computacionais
  • Módulo Brotli estático: O ngx_http_brotli_static_module.Portanto, o módulo permite servir arquivos estáticos pré-comprovados, portanto, menos recursos intensivos em recursos.

Agora use seu editor favorito para abrir o/etc/nginx/nginx.arquivo conf para adicionar módulos de carga Brotli para iniciar a configuração do Brotli, incluindo as seguintes linhas:

ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.conf
# Seção de carregamento do módulo
load_module "Módulos/ngx_http_brotli_filter_module.então";
load_module "Módulos/ngx_http_brotli_static_module.então";

Também incluiremos os caminhos das pastas de configuração /etc/nginx/conf.d/*.conf

e /usr/share/nginx/módulos/*.conf No arquivo acima, como:

http
# Inclua pastas de configuração
incluir/etc/nginx/conf.d/*.conf;
incluir/usr/share/nginx/módulos/*.conf;

Para adicionar a configuração Brotli, abra o/etc/nginx/conf.D/Brotli.conf

arquivo no vim editor e habilitar Brotli definindo as seguintes diretivas de configuração:

Brotli On;
brotli_static ON;
brotli_comp_level 6;
BROTLI_TYPES APLICAÇÃO/RSS+XML APLICAÇÃO/XHTML+XML
Texto/CSS Texto/Plano;

O "Brotli Off |”O valor permite ou desativa a dinâmica ou a compactação de mosca do conteúdo.

O 'brotli_ estático em ' Ativa o servidor nginx para verificar se os arquivos pré-comprovados com o .Extensões de BR existem ou não. Também podemos transformar essa configuração em uma opção desligado ou sempre. O sempre O valor permite que o servidor envie conteúdo pré-comprovado sem confirmar se o navegador suporta ou não. Como Brotli é intensivo em recursos, este módulo é mais adequado para reduzir as situações de gargalo.

O "brotli_comp_level 6”A diretiva define o nível de qualidade de compressão dinâmica para 6. Pode variar de 0 a 11.

Por fim, ative a compressão dinâmica para tipos específicos de mímica, enquanto as respostas de texto/html são sempre compactadas. A sintaxe padrão para esta diretiva é brotli_types [tipo MIME]. Você pode encontrar mais sobre a diretiva de configuração no GitHub.

Salve as alterações, reinicie o serviço nginx digitando “Serviço sudo reiniciar nginx” E tudo está feito.

Conclusão

Após as mudanças, você notará algumas melhorias óbvias nas métricas de desempenho. No entanto, ele vem com uma ligeira desvantagem do aumento da carga da CPU nos horários de pico. Para evitar essas situações, fique de olho no uso da CPU; Se atingir 100% regularmente, podemos utilizar muitas opções de acordo com nossas preferências, como apresentar conteúdo pré-compactado ou estático, diminuir o nível de compressão e desligar a compactação de voo, entre muitos.