15 min de leitura · Guia técnico
Gzip e Brotli no Nginx são métodos de compressão que reduzem significativamente o tamanho dos arquivos enviados aos visitantes do seu site. Para configurá-los corretamente, você precisa modificar os arquivos de configuração do Nginx. Neste guia, você aprenderá como implementar ambos os métodos de compressão e economizar até 80% de largura de banda.
Pré-requisitos
- Servidor com Nginx instalado (testado em Nginx 1.18+)
- Acesso root ou sudo ao servidor
- Sistema operacional Linux (Ubuntu 22.04 LTS, Debian 11 ou similar)
- Módulo ngx_brotli instalado (para compressão Brotli)
Entendendo a compressão web no Nginx
A compressão de conteúdo web funciona reduzindo o tamanho dos arquivos antes de enviá-los ao navegador do usuário. Quando um visitante acessa seu site, o navegador informa ao servidor quais métodos de compressão ele suporta através do cabeçalho HTTP Accept-Encoding. O Nginx então comprime os arquivos usando o método mais eficiente suportado pelo navegador.
Os dois principais algoritmos de compressão usados no Nginx são:
- Gzip: Amplamente suportado por praticamente todos os navegadores e clientes HTTP
- Brotli: Desenvolvido pelo Google, oferece taxas de compressão 15-25% melhores que o Gzip, mas com suporte limitado em navegadores mais antigos
Implementar ambos os métodos garante máxima compatibilidade e eficiência. O Nginx servirá arquivos comprimidos com Brotli para navegadores modernos e usará Gzip como fallback para clientes mais antigos.
Configurando a compressão Gzip no Nginx
A compressão Gzip vem integrada ao Nginx por padrão, facilitando sua ativação. Vamos configurá-la primeiro:
- Abra o arquivo de configuração principal do Nginx:
sudo nano /etc/nginx/nginx.conf
- Localize a seção
http {e adicione ou modifique as seguintes diretivas dentro dela:
http {
# Outras configurações existentes...
# Configuração Gzip
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
# Outras configurações...
}
- Salve o arquivo e verifique se a configuração do Nginx está correta:
sudo nginx -t
Você deverá ver uma saída como esta:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- Reinicie o Nginx para aplicar as alterações:
sudo systemctl restart nginx
Explicação das diretivas Gzip
Vamos entender o que cada configuração faz:
- gzip on: Ativa a compressão Gzip
- gzip_comp_level 5: Define o nível de compressão (1-9). O nível 5 oferece bom equilíbrio entre taxa de compressão e uso de CPU
- gzip_min_length 256: Comprime apenas arquivos maiores que 256 bytes (compressão de arquivos muito pequenos pode ser contraproducente)
- gzip_proxied any: Comprime respostas para todos os tipos de solicitações proxy
- gzip_vary on: Adiciona o cabeçalho "Vary: Accept-Encoding" para informar caches que o conteúdo pode variar dependendo do encoding
- gzip_types: Lista de tipos MIME que serão comprimidos (além do padrão text/html)
Instalando e configurando a compressão Brotli no Nginx
A compressão Brotli não vem integrada ao Nginx por padrão. Precisamos instalar o módulo ngx_brotli e depois configurá-lo:
Instalando o módulo Brotli para Nginx
- Instale as dependências necessárias:
sudo apt update
sudo apt install -y git build-essential libpcre3-dev zlib1g-dev
- Verifique a versão do seu Nginx:
nginx -v
O resultado será algo como:
nginx version: nginx/1.18.0 (Ubuntu)
- Baixe o código-fonte do Nginx na mesma versão que você está usando:
cd /tmp
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -xzf nginx-1.18.0.tar.gz
- Clone o repositório do módulo ngx_brotli:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
- Obtenha os argumentos de configuração do seu Nginx atual:
nginx -V
Copie todos os argumentos após "configure arguments:" para usar no próximo passo.
- Compile o Nginx com o módulo Brotli:
cd /tmp/nginx-1.18.0
./configure [cole aqui os argumentos originais] --add-dynamic-module=/tmp/ngx_brotli
make modules
- Copie o módulo compilado para o diretório de módulos do Nginx:
sudo cp objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules/
sudo cp objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules/
- Carregue os módulos Brotli no Nginx. Edite o arquivo:
sudo nano /etc/nginx/modules-enabled/brotli.conf
Adicione as seguintes linhas:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Configurando Brotli no Nginx
- Abra o arquivo de configuração principal do Nginx:
sudo nano /etc/nginx/nginx.conf
- Adicione as seguintes diretivas dentro da seção
http {:
http {
# Outras configurações existentes...
# Configuração Brotli
brotli on;
brotli_comp_level 4;
brotli_static on;
brotli_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
# Outras configurações...
}
- Verifique a configuração do Nginx:
sudo nginx -t
- Reinicie o Nginx para aplicar as alterações:
sudo systemctl restart nginx
Explicação das diretivas Brotli
Vamos entender o que cada configuração faz:
- brotli on: Ativa a compressão Brotli
- brotli_comp_level 4: Define o nível de compressão (0-11). O nível 4 oferece bom equilíbrio entre taxa de compressão e uso de CPU
- brotli_static on: Permite servir arquivos pré-comprimidos com extensão .br
- brotli_types: Lista de tipos MIME que serão comprimidos (além do padrão text/html)
Verificando a configuração da compressão
Após configurar Gzip e Brotli, é importante verificar se estão funcionando corretamente. Existem várias maneiras de fazer isso:
Usando o comando curl
Você pode usar o comando curl para verificar os cabeçalhos de resposta do seu site:
curl -H "Accept-Encoding: gzip" -I https://seu-site.com/
curl -H "Accept-Encoding: br" -I https://seu-site.com/
Se a compressão estiver funcionando, você verá Content-Encoding: gzip ou Content-Encoding: br nos cabeçalhos de resposta.
Usando ferramentas online
Você também pode usar ferramentas online como GiftOfSpeed ou KeyCDN Brotli Test para verificar se seu site está usando compressão corretamente.
Medindo a economia de banda
Para medir quanto de banda você está economizando, compare o tamanho dos arquivos com e sem compressão:
- Verifique o tamanho sem compressão:
curl -H "Accept-Encoding: identity" -o arquivo_sem_compressao.html https://seu-site.com/
ls -la arquivo_sem_compressao.html
- Verifique o tamanho com Gzip:
curl -H "Accept-Encoding: gzip" --output arquivo_gzip.html https://seu-site.com/
ls -la arquivo_gzip.html
- Verifique o tamanho com Brotli:
curl -H "Accept-Encoding: br" --output arquivo_brotli.html https://seu-site.com/
ls -la arquivo_brotli.html
Compare os tamanhos para calcular a economia de banda. Tipicamente, você verá uma redução de 60-80% para arquivos HTML, CSS e JavaScript.
Otimizando as configurações de compressão
Para obter o melhor desempenho, você pode ajustar as configurações de compressão com base nas características do seu servidor e site:
Ajustando níveis de compressão
Os níveis de compressão afetam diretamente o uso de CPU e a taxa de compressão:
- Gzip: Níveis variam de 1 (menor compressão, menor uso de CPU) a 9 (maior compressão, maior uso de CPU)
- Brotli: Níveis variam de 0 a 11, com comportamento similar
Para servidores com recursos limitados, considere usar níveis mais baixos:
# Para servidores com CPU limitado
gzip_comp_level 3;
brotli_comp_level 2;
Para servidores com recursos abundantes, você pode aumentar os níveis:
# Para servidores com CPU abundante
gzip_comp_level 6;
brotli_comp_level 5;
Compressão condicional por tamanho de arquivo
Comprimir arquivos muito pequenos pode ser contraproducente. Ajuste o tamanho mínimo:
gzip_min_length 1000; # Comprimir apenas arquivos maiores que 1KB
Configuração por site específico
Você também pode configurar a compressão para sites específicos em seus arquivos de configuração de servidor ou bloco de localização:
server {
listen 80;
server_name exemplo.com www.exemplo.com;
# Configurações específicas para este site
gzip_comp_level 7; # Compressão mais agressiva para este site
brotli_comp_level 6;
# Resto da configuração...
}
Problemas comuns e como resolver
Sintoma: Compressão não está funcionando
Causa: Configuração incorreta ou módulos não carregados.
Solução: Verifique se os módulos estão carregados corretamente com nginx -V e se as diretivas estão na seção correta do arquivo de configuração. Certifique-se de que reiniciou o Nginx após as alterações.
Sintoma: Alto uso de CPU após ativar compressão
Causa: Níveis de compressão muito altos ou servidor com recursos limitados.
Solução: Reduza os níveis de compressão (gzip_comp_level e brotli_comp_level) para valores mais baixos, como 3 ou 4. Aumente também o valor de gzip_min_length para evitar comprimir arquivos pequenos.
Sintoma: Erro "unknown directive" ao reiniciar Nginx
Causa: Módulo Brotli não está instalado ou carregado corretamente.
Solução: Verifique se os arquivos do módulo existem em /usr/lib/nginx/modules/ e se as diretivas load_module estão corretas no arquivo de configuração.
Sintoma: Alguns navegadores recebem conteúdo não comprimido
Causa: Navegadores antigos podem não suportar Brotli ou enviar cabeçalhos Accept-Encoding diferentes.
Solução: Certifique-se de ter configurado tanto Gzip quanto Brotli para máxima compatibilidade. Verifique se gzip_vary e brotli_types incluem todos os tipos de conteúdo relevantes.
Sintoma: Arquivos estáticos não estão sendo comprimidos
Causa: Tipos MIME não incluídos nas diretivas gzip_types ou brotli_types.
Solução: Adicione os tipos MIME relevantes às diretivas gzip_types e brotli_types. Verifique os logs de acesso para identificar quais tipos estão faltando.
Perguntas frequentes sobre compressão no Nginx
Qual a diferença entre Gzip e Brotli?
Gzip é um algoritmo de compressão mais antigo e amplamente suportado, enquanto Brotli é mais recente e oferece melhor taxa de compressão (15-25% superior). Brotli é mais eficiente para arquivos de texto como HTML, CSS e JavaScript, mas tem suporte limitado em navegadores mais antigos.
Quanto de banda posso economizar com compressão no Nginx?
A economia de banda com compressão no Nginx varia entre 50% e 80%, dependendo do tipo de conteúdo. Arquivos de texto como HTML, CSS e JavaScript podem ser reduzidos em até 70-80%, enquanto JSON e XML tipicamente economizam 60-70% do tráfego original.
O Brotli funciona em todos os navegadores?
Não, o Brotli não funciona em todos os navegadores. Ele é suportado em versões modernas do Chrome, Firefox, Edge e Safari, mas navegadores mais antigos e alguns clientes específicos não o reconhecem. Por isso, é recomendado configurar Gzip como fallback quando Brotli não for suportado.
A compressão Gzip ou Brotli afeta o CPU do servidor?
Sim, a compressão aumenta o uso de CPU do servidor, especialmente em níveis mais altos de compressão. O Brotli geralmente consome mais recursos de CPU que o Gzip para compressão, mas oferece melhor taxa de compressão. Para balancear performance e economia de banda, recomenda-se usar níveis moderados (3-6 para Gzip, 4-5 para Brotli).
Posso usar Gzip e Brotli simultaneamente no Nginx?
Sim, é possível e recomendado configurar Gzip e Brotli simultaneamente no Nginx. O servidor detectará automaticamente qual método o navegador suporta através do cabeçalho Accept-Encoding e servirá o conteúdo no formato apropriado, priorizando Brotli quando disponível por sua melhor taxa de compressão.
Conclusão
- A implementação de compressão Gzip e Brotli no Nginx pode reduzir o consumo de banda em até 80%, melhorando significativamente o tempo de carregamento do seu site.
- Configure ambos os métodos para garantir compatibilidade com todos os navegadores, com Brotli oferecendo melhor compressão para navegadores modernos e Gzip servindo como fallback.
- Ajuste os níveis de compressão de acordo com os recursos do seu servidor para encontrar o equilíbrio ideal entre economia de banda e uso de CPU.
Precisa de ajuda com otimização de servidores?
Configurar compressão é apenas um dos muitos ajustes que podem melhorar o desempenho do seu site. Nossos servidores VPS vêm com suporte técnico especializado para ajudar você a implementar estas e outras otimizações.