Usando compressão Brotli no Nginx

Uma das formas de aumentar o desempenho de um website é comprimir os arquivos usados nele. Além do padrão GZip, o Brotli vem sendo uma alternativa para deixar os arquivos mais leves para o carregamento rápido.

Desenvolvido pelo Google, o Brotli é um algoritmo de compressão de dados compatível com a maioria dos navegadores modernos. Ele é gratuito, de código aberto, e possui uma melhor taxa de compressão. Ou seja, produz arquivos compactados menores.

O Nginx permite o uso desse método de compactação por meio de um módulo dinâmico, gerado a partir do código-fonte do servidor e do Brotli. Neste post você encontra o passo a passo de como implantar esse recurso.

Logo Nginx
Nginx se tornou um dos servidores mais usados para aplicações web

Criando o módulo Brotli

Primeiro é necessário verificar qual versão do Nginx está instalada, para gerarmos os módulos correspondentes àquela versão.

nginx -v

Em seguida, instalaremos os pacotes necessários para fazer o build dos módulos do Brotli para o Nginx da versão correspondente.

sudo apt install git gcc cmake libpcre3 libpcre3-dev \
                 zlib1g zlib1g-dev openssl libssl-dev

Faça o clone do repositório oficial do Brotli para Nginx no GitHub. Recomendo fazer os downloads na pasta do usuário.

git clone https://github.com/google/ngx_brotli.git

Faça o download do Nginx, e em seguida, descompacte o arquivo. A versão do servidor deve ser a mesma da que receberá o módulo.

wget https://nginx.org/download/nginx-<VERSION>.tar.gz
tar zxvf nginx-<VERSION>.tar.gz

Entre na pasta dos arquivos descompactados do Nginx.

cd nginx-<VERSION>

Uma vez dentro da pasta do código-fonte do Nginx, crie os arquivos dos módulos com os comandos abaixo.

# Configure dynamic module
sudo ./configure --with-compat --add-dynamic-module=../ngx_brotli

# Make
sudo make modules

Finalmente, copie os arquivos de módulos gerados no comando anterior para a pasta de módulos da sua instalação do Nginx. No exemplo abaixo, o servidor está instalado no path /usr/share/nginx/.

sudo cp ./objs/*.so /usr/share/nginx/modules

Importante: repita estas etapas a cada atualização de versão do Nginx. Caso contrário, o módulo gerado deixará de ser incompatível com a versão e o servidor não funcionará.

Configurando o Nginx

Por fim, edite o arquivo nginx.conf para carregar, ativar e passar as opções de compressão do Brotli.

# Load module section
load_module "modules/ngx_http_brotli_filter_module.so";
load_module "modules/ngx_http_brotli_static_module.so";


http {
...

    # Brotli compressing
    brotli on;
    brotli_comp_level 4;
    brotli_static on;
    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;

...
}

Após a atualização do arquivo de configuração, reinicie o servidor (no Debian sudo systemctl restart nginx). Limpe o cache do seu navegador e, ao carregar o website novamente, a sigla “br” aparecerá no “Content-Encoding” nos tipos de arquivos compactados.

Avatar de Matheus Misumoto