17 min de leitura · Guia técnico
Gzip e Brotli no Nginx são dois algoritmos de compressão HTTP que reduzem o tamanho das respostas enviadas pelo servidor, economizando banda e acelerando o carregamento de páginas. Para ativar e comparar os dois no Nginx no Debian 12, siga estes passos:
- Verifique a versão do Nginx instalada e confirme os módulos disponíveis.
- Ative e configure o módulo Gzip no arquivo principal do Nginx.
- Instale o módulo
ngx_brotlivia repositório ou compilação. - Configure os parâmetros de Brotli no bloco
httpouserver. - Teste a configuração e recarregue o Nginx.
- Verifique os cabeçalhos de resposta para confirmar qual compressão está ativa.
Pré-requisitos para ativar Gzip e Brotli no Nginx
- Acesso root ou sudo ao servidor (Debian 12, Ubuntu 24.04 LTS ou AlmaLinux 9).
- Nginx 1.24 ou superior instalado (
nginx -vpara verificar). - HTTPS ativo no domínio — Brotli só funciona em conexões seguras nos navegadores modernos. Veja como configurar em como redirecionar um site HTTP para HTTPS.
- Acesso SSH ao servidor. Consulte como acessar servidores VPS Linux da AviraHost se precisar de ajuda com a conexão.
- Editor de texto como
nanoouvimdisponível. - Permissão para instalar pacotes via
aptou compilar código-fonte.
Como configurar o Gzip no Nginx: parâmetros essenciais
A compressão Gzip é o método de compressão HTTP mais difundido e está disponível nativamente em qualquer instalação padrão do Nginx, sem necessidade de módulos adicionais. Configurá-la corretamente é o primeiro passo para reduzir o consumo de banda do seu servidor.
Abra o arquivo de configuração principal do Nginx:
sudo nano /etc/nginx/nginx.conf
Dentro do bloco http { }, adicione ou ajuste as seguintes diretivas:
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/rss+xml
application/atom+xml
image/svg+xml
font/truetype
font/opentype
application/vnd.ms-fontobject;
}
Cada diretiva tem um papel específico:
- gzip on — ativa a compressão Gzip globalmente.
- gzip_vary on — adiciona o cabeçalho
Vary: Accept-Encoding, essencial para caches intermediários (CDN, proxies) servirem a versão correta. - gzip_proxied any — comprime respostas mesmo quando a requisição vem de um proxy reverso.
- gzip_comp_level 6 — nível de compressão entre 1 (mais rápido, menor compressão) e 9 (mais lento, maior compressão). O nível 6 é o ponto ideal para produção.
- gzip_min_length 256 — evita comprimir arquivos muito pequenos, onde o overhead supera o ganho.
- gzip_types — lista de tipos MIME que serão comprimidos. Nunca inclua imagens JPEG ou PNG, pois já são formatos comprimidos.
Salve o arquivo e teste a sintaxe antes de recarregar:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl reload nginx
Como instalar o módulo ngx_brotli no Debian 12
O suporte a Brotli no Nginx exige o módulo ngx_brotli, que não é incluído nos pacotes padrão da maioria das distribuições. No Debian 12, a forma mais prática é usar o repositório mantido por Ondřej Surý, que disponibiliza pacotes pré-compilados com o módulo já integrado.
Primeiro, adicione o repositório oficial:
sudo apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Em seguida, adicione o repositório mainline do Nginx:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Atualize os pacotes e instale o Nginx com suporte a Brotli:
sudo apt update
sudo apt install -y nginx libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static
Verifique se os módulos foram carregados corretamente:
nginx -V 2>&1 | grep -o "brotli"
brotli
brotli
Se a saída mostrar brotli duas vezes (filtro e estático), o módulo está disponível. Caso os módulos sejam instalados como arquivos .so separados, confirme que estão sendo carregados:
ls /etc/nginx/modules-enabled/ | grep brotli
50-mod-http-brotli-filter.conf
50-mod-http-brotli-static.conf
Configurando o Brotli no bloco http do Nginx
Com o módulo instalado, a configuração do Brotli segue uma lógica semelhante ao Gzip, mas com diretivas próprias. O algoritmo Brotli produz arquivos menores que o Gzip para o mesmo nível de esforço de CPU, especialmente em arquivos de texto, HTML, CSS, JavaScript e fontes web.
Adicione as diretivas Brotli dentro do bloco http { } no arquivo /etc/nginx/nginx.conf, logo após as configurações de Gzip:
http {
# Gzip (configurações anteriores mantidas)
gzip on;
gzip_vary on;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
# Brotli
brotli on;
brotli_comp_level 5;
brotli_static on;
brotli_min_length 256;
brotli_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/rss+xml
application/atom+xml
image/svg+xml
font/truetype
font/opentype
application/vnd.ms-fontobject;
}
Entendendo as diretivas Brotli:
- brotli on — ativa a compressão Brotli dinâmica para respostas em tempo real.
- brotli_comp_level 5 — nível de compressão entre 0 e 11. O nível 5 equilibra velocidade e taxa de compressão para conteúdo dinâmico. Níveis acima de 6 aumentam o tempo de CPU sem ganho proporcional.
- brotli_static on — instrui o Nginx a servir arquivos
.brpré-comprimidos se existirem no disco, eliminando o custo de CPU em tempo real para arquivos estáticos. - brotli_min_length 256 — evita comprimir respostas muito pequenas onde o overhead não compensa.
Teste e recarregue:
sudo nginx -t && sudo systemctl reload nginx
Como verificar se Gzip e Brotli estão funcionando no Nginx
Após recarregar o Nginx, é fundamental validar que a compressão está sendo aplicada corretamente antes de considerar a configuração concluída. O cabeçalho Content-Encoding na resposta HTTP indica qual algoritmo foi usado.
Use o curl para testar Brotli:
curl -H "Accept-Encoding: br,gzip,deflate" -I https://seudominio.com
HTTP/2 200
content-type: text/html; charset=UTF-8
content-encoding: br
vary: Accept-Encoding
server: nginx/1.26.0
Se o cabeçalho retornar content-encoding: br, o Brotli está ativo. Para forçar o teste com Gzip apenas:
curl -H "Accept-Encoding: gzip" -I https://seudominio.com
HTTP/2 200
content-type: text/html; charset=UTF-8
content-encoding: gzip
vary: Accept-Encoding
Para verificar o tamanho real da resposta comprimida versus sem compressão:
curl -s -o /dev/null -w "%{size_download}" https://seudominio.com
curl -s -H "Accept-Encoding: gzip" -o /dev/null -w "%{size_download}" https://seudominio.com
curl -s -H "Accept-Encoding: br" -o /dev/null -w "%{size_download}" https://seudominio.com
A diferença entre os valores mostra diretamente quanto de banda está sendo economizado por requisição. Em páginas HTML típicas de 80 KB a 200 KB, a compressão Gzip reduz o tamanho em 60% a 70%, enquanto Brotli pode atingir 70% a 80% de redução no mesmo conteúdo.
Você também pode usar as ferramentas de desenvolvedor do navegador (F12 → aba Network → coluna Content-Encoding) para confirmar visualmente qual algoritmo está sendo aplicado em cada recurso.
Pré-compressão de arquivos estáticos com Brotli offline
A diretiva brotli_static on instrui o Nginx a procurar por arquivos com extensão .br no mesmo diretório do arquivo original. Quando encontrado, o Nginx serve o arquivo pré-comprimido diretamente, sem custo de CPU em tempo real — ideal para assets estáticos como CSS, JS e fontes que raramente mudam.
Para gerar os arquivos .br manualmente, instale a ferramenta de linha de comando:
sudo apt install -y brotli
Comprima os arquivos estáticos do seu site (ajuste o caminho conforme seu ambiente):
find /var/www/html -type f \( -name "*.css" -o -name "*.js" -o -name "*.html" -o -name "*.svg" \) \
-exec brotli --best --force --output={}.br {} \;
Verifique se os arquivos foram gerados:
ls -lh /var/www/html/assets/app.js /var/www/html/assets/app.js.br
-rw-r--r-- 1 www-data www-data 142K jan 10 10:00 /var/www/html/assets/app.js
-rw-r--r-- 1 www-data www-data 38K jan 10 10:01 /var/www/html/assets/app.js.br
Neste exemplo, um arquivo JavaScript de 142 KB foi reduzido para 38 KB com Brotli offline — uma economia de aproximadamente 73% de banda por requisição desse arquivo.
Para automatizar a geração dos arquivos .br após cada deploy, adicione o comando find acima ao seu script de CI/CD ou a um hook de deploy. Consulte também as dicas de otimização de servidores Linux para outras técnicas complementares de performance.
Problemas comuns e como resolver
Sintoma: cabeçalho Content-Encoding não aparece na resposta
Causa: O tipo MIME do arquivo não está listado em gzip_types ou brotli_types, ou o arquivo é menor que o valor definido em gzip_min_length / brotli_min_length.
Solução: Verifique o Content-Type retornado pelo servidor com curl -I https://seudominio.com/arquivo.css e confirme que o tipo MIME correspondente está na lista de tipos configurados. Reduza temporariamente o gzip_min_length para 1 para testar se o tamanho é o problema. Após confirmar, restaure o valor original.
Sintoma: erro "unknown directive brotli" ao testar o Nginx
Causa: O módulo ngx_brotli não está instalado ou não está sendo carregado pelo Nginx. Isso ocorre quando o pacote foi instalado mas os arquivos .conf de carregamento do módulo não existem em /etc/nginx/modules-enabled/.
Solução: Execute ls /etc/nginx/modules-enabled/ | grep brotli. Se vazio, verifique se o pacote foi instalado corretamente com dpkg -l | grep brotli. Reinstale com sudo apt install --reinstall libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static e verifique se os arquivos de configuração foram criados.
Sintoma: Brotli não é usado mesmo com o módulo instalado
Causa: O site está sendo acessado via HTTP puro (sem HTTPS). Todos os navegadores modernos omitem br do cabeçalho Accept-Encoding em conexões não seguras, então o servidor nunca recebe a solicitação por Brotli.
Solução: Ative o HTTPS no domínio com Let's Encrypt (sudo certbot --nginx -d seudominio.com) e configure o redirecionamento automático de HTTP para HTTPS. Após isso, o Brotli será negociado automaticamente pelos navegadores.
Sintoma: alta utilização de CPU após ativar Brotli
Causa: O nível de compressão Brotli está configurado muito alto (acima de 6) para conteúdo dinâmico gerado em tempo real, como respostas de PHP ou APIs.
Solução: Reduza brotli_comp_level para 4 ou 5 para conteúdo dinâmico. Para conteúdo estático, use brotli_static on com arquivos pré-comprimidos em nível 11, eliminando o custo de CPU em tempo real. Monitore o uso de CPU com top ou htop antes e depois do ajuste.
Sintoma: cache CDN servindo versão não comprimida
Causa: O cabeçalho Vary: Accept-Encoding não está sendo enviado pelo Nginx, fazendo com que a CDN armazene apenas uma versão do recurso e a sirva para todos os clientes, independentemente do suporte a compressão.
Solução: Confirme que gzip_vary on está ativo na configuração. Para Brotli, o módulo ngx_brotli adiciona automaticamente o cabeçalho Vary quando a compressão é aplicada. Verifique com curl -I https://seudominio.com | grep -i vary. O retorno deve incluir Vary: Accept-Encoding.
Perguntas frequentes sobre Gzip e Brotli no Nginx
Qual a diferença entre Gzip e Brotli no Nginx?
Gzip é o algoritmo de compressão HTTP mais antigo e amplamente suportado, disponível nativamente no Nginx sem módulos adicionais. Brotli é um algoritmo mais moderno desenvolvido pelo Google que, em geral, produz arquivos menores que o Gzip para o mesmo nível de uso de CPU, especialmente em textos e fontes. A escolha depende do suporte do cliente: todos os navegadores modernos suportam Brotli via HTTPS, mas Gzip ainda é necessário como fallback para clientes mais antigos ou conexões HTTP.
Preciso instalar algum módulo extra para usar Brotli no Nginx?
Sim. O Nginx não inclui suporte a Brotli por padrão em nenhuma distribuição Linux. É necessário compilar o módulo ngx_brotli junto ao Nginx ou instalar um pacote pré-compilado disponível em repositórios como o oficial do Nginx ou o de Ondřej Surý no Debian. Sem o módulo instalado e carregado, apenas Gzip estará disponível nativamente e qualquer diretiva brotli no arquivo de configuração causará erro de sintaxe.
Brotli funciona sem HTTPS?
Tecnicamente o protocolo HTTP não impede o uso de Brotli, mas todos os navegadores modernos — Chrome, Firefox, Safari, Edge — só incluem br no cabeçalho Accept-Encoding em conexões HTTPS. Em HTTP puro, o servidor nunca receberá uma solicitação por Brotli e enviará Gzip ou resposta sem compressão. Portanto, na prática, Brotli exige HTTPS ativo no servidor para funcionar com usuários reais.
Como verificar se o Nginx está enviando resposta comprimida?
Execute curl -H "Accept-Encoding: br,gzip" -I https://seudominio.com e observe o cabeçalho Content-Encoding na resposta. Se retornar br, Brotli está ativo; se retornar gzip, Gzip está sendo usado; se o cabeçalho estiver ausente, nenhuma compressão está sendo aplicada. Você também pode usar as ferramentas de desenvolvedor do navegador na aba Network, coluna Content-Encoding, para verificar recurso por recurso.
Qual nível de compressão usar no Nginx para não sobrecarregar a CPU?
Para Gzip, o nível 5 ou 6 oferece boa relação entre taxa de compressão e uso de CPU, sendo o padrão recomendado para produção. Para Brotli, o nível 4 ou 5 é indicado para conteúdo dinâmico gerado em tempo real; níveis acima de 6 aumentam significativamente o tempo de processamento sem ganho proporcional de compressão. Conteúdo estático pode usar níveis mais altos com Brotli offline (brotli_static on), pois o custo de CPU ocorre apenas uma vez, no momento da geração do arquivo.
Conclusão
- Ative Gzip imediatamente — está disponível nativamente no Nginx, não exige módulos extras e reduz o consumo de banda em 60% a 70% para HTML, CSS e JavaScript sem impacto perceptível na CPU com nível 6.
- Adicione Brotli para ganhos adicionais — instale o módulo
ngx_brotli, configurebrotli_comp_level 5para conteúdo dinâmico e usebrotli_static oncom arquivos pré-comprimidos para assets estáticos, eliminando custo de CPU em tempo real. - Valide sempre com curl — após qualquer alteração, execute
curl -H "Accept-Encoding: br,gzip" -I https://seudominio.come confirme o cabeçalhoContent-Encodingantes de considerar a configuração concluída em produção.
Leia também
- Comparativo: Varnish vs Redis como cache HTTP no Debian 12
- Entenda o Deploy de Node.js no Debian 12 com PM2
- Guia Definitivo: Configurar Nginx como Proxy Reverso
Precisa de ajuda com Nginx e compressão no seu servidor?
Configurar Gzip e Brotli corretamente pode reduzir significativamente o consumo de banda e melhorar o tempo de carregamento do seu site. Se você precisa de um ambiente VPS Linux com Nginx já otimizado ou quer suporte técnico para ajustar as configurações do seu servidor, a AviraHost oferece planos de VPS com suporte especializado.