Apache + módulo deflate = economia de banda

Aprenda como utilizar o módulo deflate (mod_deflate) do Apache 2. Comprima os dados que são transmitidos a partir de seu servidor. Desafogue o seu link economizando banda e deixe seus clientes felizes ao acessarem suas aplicações WEB com rapidez.

[ Hits: 22.617 ]

Por: José Vanol Jr. em 04/01/2012


Aprenda a utilizar o módulo deflate (mod_deflate) do Apache 2



No seu dia a dia, provavelmente você já deve ter se deparado com sites que demoram uma eternidade para serem carregados devido ao fato de terem páginas muito pesadas (não discutiremos a qualidade do código, da infraestrutura e de outros detalhes que estão por trás). A situação fica pior ainda se a sua internet é discada ou móvel.

Essa é, pois, a angústia de seus clientes. Por outro lado, sua angústia está no consumo de banda. É desesperador ver o seu link a ponto de ser estrangulado, principalmente se você hospeda sites ou aplicações WEB com um grande número de acessos simultâneos.

Não entre em pânico! Pois existe a possibilidade de comprimir os dados entre você e o seu cliente. Ele fica feliz, pois as páginas são carregadas rapidamente. E você desafoga o seu link. Tudo isso graças ao módulo deflate do Apache.

Descrição do módulo deflate

Conforme Morimoto (2008, p. 406), o Módulo Deflate do Apache:

"Permite comprimir de forma automática as páginas HTML (e também outros tipos de arquivos) enviados aos clientes, de forma a economizar banda e a reduzir o tempo de carregamento das páginas.

Se os sites hospedados no servidor utilizam páginas com grandes volumes de texto, a redução pode ser bastante significativa. O uso de compressão é negociado entre o servidor e o cliente no momento em que ele requisita a página, de forma que você não precisa se preocupar em excluir navegadores móveis ou clientes com browsers antigos. Ao perceber que o cliente não suporta o recurso, o servidor simplesmente envia a página sem compressão.

O uso do Deflate aumenta sutilmente o uso de processamento no servidor, já que ele terá o trabalho de comprimir cada página solicitada antes de enviá-la ao cliente, mas isso é compensado pelo fato de o cliente demorar menos tempo para carregar cada página, o que permite que o servidor mantenha um número menor de instâncias do Apache carregadas na memória."


Ativando o módulo deflate

Tendo por pressuposto que você já tem um servidor WEB devidamente instalado rodando o Apache, vamos à ativação do módulo deflate (mod_deflate).

No Debian e seus derivados a ativação é bastante simples através do comando a2enmod:

# a2enmod deflate

No Red Hat e seus derivados, conforme Morimoto (2008, p. 407), verifique se a linha a seguir está presente dentro da seção 'Dynamic Shared Object (DSO) Support' do arquivo /etc/httpd/conf/httpd.conf. Adicione-a manualmente caso necessário:

LoadModule deflate_module modules/mod_deflate.so

Em algumas outras distribuições, em /etc/httpd/conf/httpd.conf ou similar, usa-se o caminho completo até o arquivo:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

Para que o módulo entre em ação, reinicie o Apache.

No Debian e seus derivados:

# /etc/init.d/apache2 restart

No Red Hat e seus derivados:

# service httpd restart

Configurando o módulo deflate

No Debian, a configuração vai no arquivo /etc/apache2/mods-available/deflate.conf, enquanto do CentOS e no Fedora é usado o arquivo /etc/httpd/conf.d/httpd-deflate.conf.

a) A configuração mais básica com a qual o deflate comprime somente os aquivos HTML, texto puro e XML é (configuração padrão do Debian):

<IfModule mod_deflate.c>
   AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>

b) O Deflate comprime todos os arquivos, exceto as imagens '.gif', 'jpg' e 'png':

<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE
   SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>

c) O deflate comprime HTML, texto puro, XML, Javascript e CSS:

<IfModule mod_deflate.c>
   AddOutputFilterByType DEFLATE text/plain
   AddOutputFilterByType DEFLATE text/html
   AddOutputFilterByType DEFLATE text/xml
   AddOutputFilterByType DEFLATE text/css
   AddOutputFilterByType DEFLATE text/javascript
   AddOutputFilterByType DEFLATE application/xml
   AddOutputFilterByType DEFLATE application/xhtml+xml          
   AddOutputFilterByType DEFLATE application/rss+xml
   AddOutputFilterByType DEFLATE application/javascript
   AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

d) O deflate comprime os arquivos de acordo com a sua extensão:

<Files *.html>
   SetOutputFilter DEFLATE
</Files>
<Files *.css>
   SetOutputFilter DEFLATE
</Files>
<Files *.js>
   SetOutputFilter DEFLATE
</Files>
<Files *.jpg>
   SetOutputFilter DEFLATE
</Files>
<Files *.gif>
   SetOutputFilter DEFLATE
</Files>
<Files *.jpeg>
   SetOutputFilter DEFLATE
</Files>
<Files *.png>
   SetOutputFilter DEFLATE
</Files>
<Files *.swf>
   SetOutputFilter DEFLATE
</Files>
<Files *.txt>
   SetOutputFilter DEFLATE
</Files>
<Files *.ico>
   SetOutputFilter DEFLATE
</Files>

e) Ou ainda, outro modo de comprimir pela extensão dos arquivos:

<ifmodule mod_deflate.c="">
   <filesmatch .(.jpg|.gif|.png|.tiff|.ico|js|css)$="">
      SetOutputFilter DEFLATE
   </filesmatch>
</ifmodule>

f) Resolvendo alguns problemas com navegadores antigos:

<IfModule mod_deflate.c>
   AddOutputFilterByType DEFLATE text/html text/plain text/xml
   # Netscape 4.X
   BrowserMatch ^Mozilla/4 gzip-only-text/html
   # Netscape 4.06-4.08
   BrowserMatch ^Mozilla/4\.0[678] no-gzip
   # MSIE
   BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

g) Definindo o nível de compressão através de "DeflateCompressionLevel":

Se não for adicionado nenhum parâmetro, o 'mod_deflate' assumirá o compressão padrão (Default: DeflateCompressionLevel 6).

<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE
   # Compressão Mínima = 1
   # Compressão Máxima = 9
    DeflateCompressionLevel 9
</IfModule>

Vendo os resultados:

Antes de tudo, após ter definido as devidas configurações, faz-se necessário reiniciar o Apache para que tais configurações entrem em vigor.

a) Você pode medir os resultados criando logs do módulo deflate:

<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE
   DeflateCompressionLevel 9
   #Criando deflate_log
   DeflateFilterNote Input instream
   DeflateFilterNote Output outstream
   DeflateFilterNote Ratio ratio
   LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
   CustomLog logs/deflate_log deflate
</IfModule>

b) Ou usando algum aplicativo específico:

Eu usei a extensão Web Developer 1.1.9 para o Mozilla Firefox.
Usei também a extensão Yslow para o Google Chrome.
    Próxima página

Páginas do artigo
   1. Aprenda a utilizar o módulo deflate (mod_deflate) do Apache 2
   2. Conclusão
Outros artigos deste autor

Gerando documentos PDF com a classe FPDF no PHP

Leitura recomendada

Navegando anônimo na internet

Compartilhando Internet 3G entre notebook e smartphone Android no Linux

Monitoramento de MSN com imsniff

FreeBSD + Asterisk

Fuja da pirataria, use Last.fm

  
Comentários
[1] Comentário enviado por VonNaturAustreVe em 04/01/2012 - 19:47h

Excelente o artigo, uma dica da para expandir mais o assunto falando sobre a configuração especifica do deflate usando o htaccess, é bom para sites específicos onde precisos de alguma configuração especial ou para hospedagens compartilhadas (cujo não temos acesso as configurações do web server) mas podemos utilizar o htaccess.

[]'s

[2] Comentário enviado por jvanol em 06/01/2012 - 00:50h

Olá, VonNaturAustreVe.

Para o caso que você mencionou sobre a configuração especifica do deflate usando o .htaccess em site específicos presentes em hospedagens compartilhadas, eis algumas situações:

a) Se o servidor onde está o seu sítio estiver com o Módulo Deflate (mod_deflate) ativado, basta inserir a seguinte linha no seu arquivo .htaccess para comprimir arquivos HTML, texto puro, XML, javascript e CSS:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
Porém, a compressão de seus dados só funcionará depois que o Apache for reiniciado (ou o servidor for reiniciado).

b) Se o servidor onde está o seu sítio estiver com o Módulo Deflate (mod_deflate) desativado, suas configurações Deflate no .htaccess serão ignoradas. É necessário entrar em contato com o suporte técnico que lhe presta o serviço de hospedagem para ativar esse módulo.


Contribuir com comentário