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.833 ]

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

Básico do Apache no Debian

Compartilhando internet via rádio entre um servidor Linux e clientes Windows

Load Balancer com Failover, Perlbal e Heartbeat para servidores web

SOCKS - Acessando Hosts remotos via OpenSSH

Acelerador de conexões dial-up para provedores de acesso

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts