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
-
Verifique se o módulo está carregado:
nginx -V 2>&1 | grep brotli -
Verifique se a solicitação inclui
Accept-Encoding: br -
Verifique se o
Content-Typeda resposta está embrotli_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-Typecorresponde abrotli_types - Verifique se a conexão não está comprimida (CDN)
Relacionados
-
Módulo Brotli
Referência completa de diretivas
-
Módulo Unbrotli
Descomprimir Brotli de backends
-
Módulo PageSpeed
Camada adicional de otimização