Pular para conteúdo

Habilitar Compressão Brotli no NGINX

Comprime seu conteúdo de 15-25% melhor do que gzip com o algoritmo Brotli do Google.


  • 15-25% Menor


    Brotli alcança melhores taxas de compressão do que gzip para conteúdo de texto

  • Suporte Universal


    Todos os navegadores modernos suportam Brotli (Chrome, Firefox, Safari, Edge)

  • Carregamentos de Página Mais Rápidos


    Arquivos menores = downloads mais rápidos, especialmente em redes móveis

  • Custos de Largura de Banda Mais Baixos


    Reduza os custos de transferência de dados com uma melhor compressão


Suporte a Navegadores

Brotli é suportado por 95%+ dos navegadores em todo o mundo:

Navegador Suporte a Brotli
Chrome ✅ Desde v50 (2016)
Firefox ✅ Desde v44 (2016)
Safari ✅ Desde v11 (2017)
Edge ✅ Desde v15 (2017)
Opera ✅ Desde v38 (2016)

O NGINX automaticamente recorre ao gzip para navegadores mais antigos.


Configuração Rápida

Passo 1: Instalar o Módulo Brotli

# Instalar repositório GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

# Instalar módulo Brotli
dnf -y install nginx-module-brotli

Habilite em /etc/nginx/nginx.conf:

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Passo 2: Configurar Compressão Brotli

Crie /etc/nginx/conf.d/brotli.conf:

# Habilitar compressão Brotli
brotli on;
brotli_comp_level 6;
brotli_static on;

brotli_types
    text/plain
    text/css
    text/javascript
    text/xml
    application/javascript
    application/json
    application/xml
    application/xml+rss
    application/xhtml+xml
    application/atom+xml
    application/rss+xml
    application/x-javascript
    application/x-font-ttf
    application/x-font-opentype
    application/vnd.ms-fontobject
    font/ttf
    font/otf
    font/opentype
    font/woff
    font/woff2
    image/svg+xml
    image/x-icon;

Recarregue o NGINX:

nginx -t && systemctl reload nginx

Passo 3: Verifique se Está Funcionando

# Solicitação com suporte a Brotli
curl -sI -H 'Accept-Encoding: br' https://example.com | grep -i encoding
# Content-Encoding: br

# Comparar tamanhos
curl -so /dev/null -w '%{size_download}' -H 'Accept-Encoding: gzip' https://example.com
# 45678
curl -so /dev/null -w '%{size_download}' -H 'Accept-Encoding: br' https://example.com
# 38912  (menor!)

Níveis de Compressão

Nível Velocidade Compressão Caso de Uso
1-3 Rápido Menor Alto tráfego, limitado em CPU
4-6 Equilibrado Bom A maioria dos sites (recomendado)
7-9 Mais lento Melhor Ativos estáticos pré-comprimidos
10-11 Muito lento Melhor Compressão apenas em tempo de construção

Recomendação

Use o nível 4-6 para conteúdo dinâmico e o nível 11 para ativos estáticos pré-comprimidos.


Pré-Comprimir Ativos Estáticos

Para desempenho máximo, pré-comprima arquivos no tempo de construção:

# Instalar ferramenta CLI Brotli
dnf -y install brotli

# Comprimir seus arquivos estáticos
find /var/www/html -type f \( -name "*.css" -o -name "*.js" -o -name "*.html" -o -name "*.svg" \) \
    -exec brotli -kf --best {} \;

Isso cria arquivos .br ao lado dos originais. O NGINX serve esses automaticamente com brotli_static on.


Comparação de Tamanho

Exemplo do mundo real (jQuery 3.6.0 minificado):

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#009639', 'primaryTextColor': '#fff'}}}%%
pie showData
    title Comparação de Tamanho de Arquivo
    "Original (89KB)" : 89
    "Gzip (31KB)" : 31
    "Brotli (27KB)" : 27
Formato Tamanho Economia
Original 89 KB
Gzip 31 KB 65%
Brotli 27 KB 70%

Configuração Avançada

Manter Gzip como Fallback

# Brotli (prioridade)
brotli on;
brotli_comp_level 6;

# Gzip (fallback)
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/json;

Níveis Diferentes para Dinâmico vs Estático

# Conteúdo dinâmico - compressão mais rápida
brotli on;
brotli_comp_level 4;

# Arquivos estáticos pré-comprimidos - melhor compressão
brotli_static on;

Limite Mínimo de Tamanho

# Não comprimir arquivos pequenos (não vale a pena)
brotli_min_length 256;

Resolução de Problemas

Brotli não funcionando
  1. Verifique se o módulo está carregado:

    nginx -V 2>&1 | grep brotli
    

  2. Verifique se a solicitação inclui Accept-Encoding: br

  3. Verifique se o Content-Type da resposta está em brotli_types

Uso de CPU muito alto

Reduza o nível de compressão:

brotli_comp_level 4;  # ou até mesmo 2-3

Arquivos não estão sendo comprimidos
  • Verifique se o tamanho do arquivo > brotli_min_length
  • Verifique se o Content-Type corresponde a brotli_types
  • Verifique se a conexão não está comprimida (CDN)

Relacionados