Nginx

Como ativar a compactação Brotli no Nginx

Como ativar a compactação Brotli no Nginx

A compressão Brotli é uma técnica de compressão de propósito genérico amplamente suportada em navegadores. É comparável aos métodos de compressão disponíveis atualmente, pois oferece taxas de compressão 20-26% melhores. No entanto, não é bom a menos que o servidor 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 ela é útil? Também aprenderemos a instalar o servidor Nginx e fazer com que nosso servidor forneça arquivos compactados Brotli.

Fundo

As 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, quanto melhor, mais caro. Portanto, um grande esforço é adicionado para melhorar os formatos de compactação, utilizando ciclos mínimos de CPU.

Até agora, o formato de compressão mais potencial foi compactado com gzip. Recentemente, o gzip foi substituído por um novo algoritmo de compressão conhecido como Brotli. É um algoritmo de compressão avançado composto de codificação de Huffman, o algoritmo L77 e modelagem de contexto. Em contraste, Gzip é construído no algoritmo Deflate.

O formato de compactação sem perdas, desenvolvido pelo Google, está intimamente relacionado ao formato de compactação deflate. Ambos os métodos de compressão usam janelas deslizantes para referência posterior. O tamanho da janela deslizante Brotli varia de 1 KB a 16 MB. Em contraste, o Gzip tem um tamanho de janela fixo de 32 KB. Isso significa que a janela de Brotli é 512 vezes maior do que a janela de esvaziamento, o que não é relevante, pois arquivos de texto maiores que 32 KB raramente estão em 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 por meio de um cabeçalho. Por exemplo, se o navegador suporta gzip e esvaziar descomprimir. Ele irá adicionar essas opções em seu Aceitar-Codificação, cabeçalho, eu.e.,

Accept-Encoding = ”deflate, 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 por meio de um cabeçalho, Codificação de conteúdo. Portanto, se ele for compatível com gzip, o cabeçalho terá a seguinte aparência:

Content-Encoding = ”gzip”

Cabeçalhos de navegadores como Firefox que suportam compressão Brotli e o servidor da web que tem um módulo Brotli instalado para se parecer com estes:

Accept-Encoding = ”deflate, gzip, br”
Content-Encoding = ”gzip, br”

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

Instalação de servidor

Antes de prosseguir com a configuração Brotli, vamos configurar nosso servidor Nginx. Antes disso sudo apt-get update sua distribuição Ubuntu e digite os seguintes comandos em seu terminal bash.

[email protegido]: ~ $ sudo apt-get update
[email protegido]: ~ $ sudo apt-get install nginx -y
[email protegido]: ~ $ sudo service nginx start

Para habilitar a compressão Brotli no Nginx, iremos compilar nosso .então os módulos de acordo com os detalhes da nossa versão Nginx. Conforme mostrado, digitar o seguinte comando resultará na versão do Nginx:

[email protegido]: ~ $ nginx -v
versão nginx: nginx / 1.18.0 (Ubuntu)

Use o wget junto com os detalhes da sua versão do nginx para baixar o código-fonte do site do Nginx.

[email protegido]: ~ $ 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 ao nginx.org (nginx.org) | 3.125.197.172 |: 443 ... conectado.
Solicitação HTTP enviada, aguardando resposta… 200 OK
Comprimento: 1039530 (1015K) [aplicação / fluxo de octeto]
Salvando em: '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 compressão Brotli. Agora extraia o arquivo usando o seguinte comando.

[email protegido]: ~ $ 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 clonar o módulo do repositório do Google com git.

[email protegido]: ~ $ git clone https: // github.com / google / ngx_brotli --recursive.

Nós vamos CD no nginx-1.18.0 pasta para configurar o módulo Brotli dinâmico.

[email protegido]: ~ $ cd nginx-1.18.0 /
[email protegido]: ~ $ sudo ./ configure --with-compat --add-dynamic-module =… / ngx_brotli

Nota: Você pode receber o seguinte erro durante a configuração

./ configure: erro: o módulo de reescrita HTTP requer a biblioteca PCRE.
Você pode desativar o módulo usando --without-http_rewrite_module
opção, ou instalar a biblioteca PCRE no sistema, ou construir a biblioteca PCRE
estaticamente a partir da fonte com nginx usando --with-pcre = opção.

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

[email protegido]: ~ $ sudo apt-get install libpcre3-dev -y

Compilação de Módulo

Nós vamos usar o faço comando para criar um módulos pasta dentro do nginx-1.18.0 diretório.

[email protegido]: ~ $ sudo make módulos

Nós usamos o cp comando para copiar ngx_http_brotli *.tão arquivos do nginx-1.18.0 / objs pasta para a pasta de módulos.

[email protegido]: ~ $ cd / nginx-1.18.0 / objs /
[email protegido]: ~ $ sudo cp  ngx_http_brotli *.tão / usr / share / nginx / modules

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

[email protegido]: ~ $ ls ngx_http_brotli *.tão
ngx_http_brotli_filter_module.tão
ngx_http_brotli_static_module.tão
  • Módulo Brotli regular: O ngx_http_brotli_filter_module.então o módulo compacta 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 que ele forneça arquivos estáticos pré-compactados, portanto, com menos uso de recursos.

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

[email protegido]: ~ $ sudo vim / etc / nginx / nginx.conf
# Seção do módulo de carga
load_module "modules / ngx_http_brotli_filter_module.tão";
load_module "modules / ngx_http_brotli_static_module.tão";

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

e / usr / share / nginx / modules / *.conf no arquivo acima, como:

http
# Incluir pastas de configuração
incluir / etc / nginx / conf.d / *.conf;
inclua / usr / share / nginx / modules / *.conf;

Para adicionar a configuração Brotli, abra o arquivo / etc / nginx / conf.d / brotli.conf

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

brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_types application / rss + xml application / xhtml + xml
text / css text / plain;

O "brotli desligado |”Valor ativa ou desativa a compressão dinâmica ou em tempo real do conteúdo.

O 'brotli_ static on ' permite que o servidor Nginx verifique se os arquivos pré-compactados com o .extensões br existem ou não. Também podemos transformar essa configuração em uma opção fora ou sempre. O sempre valor permite que o servidor envie conteúdo pré-comprimido sem confirmar se o navegador oferece suporte ou não. Como o Brotli consome muitos recursos, este módulo é mais adequado para reduzir as situações de gargalo.

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

Por último, habilite a compactação dinâmica para tipos específicos de MIME, 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 e reinicie o serviço Nginx digitando “Sudo service restart nginx” e está tudo feito.

Conclusão

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

Ferramentas úteis para jogadores de Linux
Se você gosta de jogar no Linux, é provável que tenha usado aplicativos e utilitários como Wine, Lutris e OBS Studio para melhorar a experiência de jo...
Jogos HD Remasterizados para Linux que nunca tiveram uma versão Linux anterior
Muitos desenvolvedores e editores de jogos estão apresentando remasterização em HD de jogos antigos para estender a vida da franquia, por favor, os fã...
Como usar o AutoKey para automatizar jogos Linux
AutoKey é um utilitário de automação de desktop para Linux e X11, programado em Python 3, GTK e Qt. Usando sua funcionalidade de script e MACRO, você ...