Como economizar tráfego com mod_deflate do Apache2
Neste tutorial, descreverei como instalar e configurar mod_deflate em um servidor web Apache2. mod_deflate permite que o Apache2 compacte arquivos e os entregue a clientes (por exemplo, navegadores) que podem lidar com conteúdo compactado, o que a maioria dos navegadores modernos faz. Com mod_deflate, você pode compactar arquivos HTML, texto ou XML em aprox. 20 a 30% de seus tamanhos originais, economizando assim o tráfego do servidor e deixando os usuários do modem mais satisfeitos.
A compactação de arquivos causa uma carga um pouco maior no servidor, mas na minha experiência isso é compensado pelo fato de que o tempo de conexão dos clientes com o seu servidor diminui bastante. Por exemplo, um usuário de modem que precisava de sete segundos para baixar um arquivo HTML descompactado agora pode precisar apenas de dois segundos para fazer o mesmo arquivo, mas compactado.
Ao usar mod_deflate você não precisa ter medo de excluir usuários com navegadores mais antigos que não conseguem lidar com conteúdo compactado. O navegador negocia com o servidor antes de qualquer arquivo ser transferido e, se o navegador não conseguir lidar com o conteúdo compactado, o servidor entrega os arquivos descompactados.
mod_deflate substituiu o mod_gzip do Apache 1.3 no Apache2. Se você deseja servir arquivos compactados com Apache 1.3, dê uma olhada neste tutorial: mod_gzip - servindo conteúdo compactado pelo servidor web Apache
Quero dizer, em primeiro lugar, que esta não é a única forma de implementar tal sistema. Existem muitas maneiras de atingir esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!
1 Habilite mod_deflate
Se você tiver o Apache2 instalado, o mod_deflate também já deve estar instalado no seu sistema. Agora temos que habilitá-lo. No Debian, podemos fazer assim:
a2enmod deflate
Em seguida, reinicie o Apache2:
service apache2 restart
Em outras distribuições, pode ser necessário editar a configuração do Apache2 manualmente para ativar o mod_deflate. Talvez seja necessário adicionar uma linha como esta à seção LoadModule:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Certifique-se de ajustar o caminho para mod_deflate.so e reinicie o Apache2 depois.
2 Configurar mod_deflate
A compactação de arquivos pode ser configurada de duas maneiras: exclusão explícita de arquivos por extensão ou inclusão explícita de arquivos por tipo MIME. Você pode habilitar o mod_deflate para todo o seu servidor Apache2 ou apenas para sites virtuais específicos. Dependendo disso, abra a seção de configuração global do servidor Apache2 agora ou apenas a seção de configuração do vhost onde você deseja habilitar o mod_deflate.
2.1 Inclusão explícita de arquivos por tipo MIME
Se você deseja compactar apenas arquivos HTML, texto e XML, adicione esta linha à sua configuração:
AddOutputFilterByType DEFLATE text/html text/plain text/xml
Esta é a configuração que estou usando porque não quero compactar imagens ou arquivos PDF ou arquivos já compactados, como arquivos zip.
2.2 Exclusão explícita de arquivos por extensão
Se você quiser compactar todos os tipos de arquivos e excluir apenas alguns, adicione algo assim à sua configuração (em vez da linha da seção 2.1):
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
Isso compactaria todos os arquivos, exceto imagens (gif, jpg e png), arquivos já compactados (como zip e tar.gz) e arquivos PDF, o que faz sentido porque você não ganha muito compactando esses tipos de arquivo.
2.3 Outras Diretivas de Configuração
Independentemente de você usar a configuração da seção 2.1 ou 2.2, você deve adicionar estas linhas à sua configuração:
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Estas linhas são para alguns navegadores mais antigos que não suportam compactação de arquivos que não sejam documentos HTML.
A configuração foi concluída e você deve reiniciar o Apache2. No Debian, você faz assim:
service apache2 restart
Para aprender sobre outras diretivas de configuração, dê uma olhada no Módulo Apache mod_deflate.
3 testes
Para testar nossa compactação, adicionamos algumas diretivas à nossa configuração mod_deflate que registram a taxa de compactação dos arquivos entregues. Abra sua configuração mod_deflate e adicione as seguintes linhas:
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate
Certifique-se de substituir /var/log/apache2 pelo diretório de log do Apache2. Pode ser /var/log/httpd, /var/log/httpd2, etc.
Em seguida, reinicie o Apache2. No Debian, faça assim:
service apache2 restart
Agora, sempre que um arquivo for solicitado, ele será logado em /var/log/apache2/deflate_log (ou em qualquer arquivo para o qual você o alterou). Uma linha de log típica se parece com esta:
"GET /info.php HTTP/1.1" 7621/45430 (16%)
Você vê que o arquivo info.php foi solicitado e entregue. Seu tamanho original era 45.430 bytes e foi compactado para 7.621 bytes ou 16% de seu tamanho original! Este é um ótimo resultado, e se o seu site consistir principalmente de arquivos HTML, texto e XML, o mod_deflate economizará muito tráfego e, para usuários com conexão de baixa largura de banda, seu site carregará muito mais rápido.
Se você não precisar mais do log após os testes, poderá desfazer as alterações da seção 3 e reiniciar o Apache2.
4 links
- Módulo Apache mod_deflate: http://httpd.apache.org/docs/2.0/mod/mod_deflate.html
- mod_gzip - servindo conteúdo compactado pelo servidor web Apache: https://linux-console.net/linux_apache_mod_gzip