Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Gzip e Brotli no Nginx: ative, compare e economize banda

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:

  1. Verifique a versão do Nginx instalada e confirme os módulos disponíveis.
  2. Ative e configure o módulo Gzip no arquivo principal do Nginx.
  3. Instale o módulo ngx_brotli via repositório ou compilação.
  4. Configure os parâmetros de Brotli no bloco http ou server.
  5. Teste a configuração e recarregue o Nginx.
  6. 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 -v para 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 nano ou vim disponível.
  • Permissão para instalar pacotes via apt ou 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 .br pré-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, configure brotli_comp_level 5 para conteúdo dinâmico e use brotli_static on com 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.com e confirme o cabeçalho Content-Encoding antes de considerar a configuração concluída em produção.

Leia também

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.

Conheça os planos de VPS da AviraHost

  • 0 Os usuários acharam isso útil
  • Nginx, Brotli, Gzip, compressão HTTP, AviraHost, performance web, Debian 12
Esta resposta foi útil?

Artigos Relacionados

Otimizar cache Redis para aplicações PHP no Ubuntu 22.04

Para otimizar o cache Redis para aplicações PHP no Ubuntu 22.04, instale e configure o Redis,...

Configurar Alertas Automáticos com Zabbix no Ubuntu

Para configurar alertas automáticos com Zabbix no Ubuntu, instale o Zabbix Server, configure...

Otimizar MySQL: como reduzir uso de memória e acelerar consultas

Otimizar MySQL é o processo de ajustar configurações e consultas para reduzir o consumo de...

Entenda o que é Swap no Linux: como funciona e quando usar

Swap no Linux é um espaço em disco usado como extensão da memória RAM quando esta se esgota. O...

Guia Definitivo: Configurar Nginx como Proxy Reverso

Para configurar o Nginx como proxy reverso, instale o Nginx, crie um arquivo de configuração de...