Sites mais rápidos com conteúdo comprimido usando Apache2 e o mod_deflate

rSe pudéssemos colocar todas as mazelas da internet em uma única expressão essa seria: Limitação de Banda.

吉祥物大集合
Creative Commons License photo credit: tutchiio

Para ajudar um pouco nesse problema podemos configurar o servidor Apache2 para comprimir tudo que for interessante no lado do servidor e enfiar os arquivos comprimidos na rede.

Do lado do cliente, os navegadores darão seu jeito para descomprimir e colocar tudo no lugar certo. Conteúdo lindo e faceiro.

Para fazer isso, precisamos habilitar um módulo extra: O mod_deflate.

O uso deste módulo permite que você comprima arqivos de texto (html,javascript, css)  com fatores de compressão da órdem de 40%.
Essa compressão causa um pequeno aumento de carga nas cpus do servidor. Fique tranquilo quanto a isso, o ganho de banda mais que compensa o aumento de carga.

Habilitar o mod_deflate no ubunto é simples. Primeiro abra uma sessão no terminal, com direitos de root e digite:

a2enmod deflate

Este comando tão complexo, habilitará o mod_deflate e pronto. Não fique tão contente. Nem tudo são flores e ainda não acabamos. Para que o mod_deflate funcione, você terá que reiniciar o apache. Então digite:

/etc/init.d/apache2 restart

Nem todo mundo tem a graça e a felicidade de usar o Ubuntu ou o Debian para estes não tão felizes, será necessário editar o arquivo de configuração do Apache (http.conf, apache.conf, ou coisa parecida)  e incluir a seguinte linha:

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

Calma! Ainda não acabou.

Você ainda precisa criar ou editar o arquivo deflate.conf que fica em /etc/apache2/mods-available/ e determinar o que deve ou não ser comprimido. O meu arquivo, que uso a anos sem pestanejar, segue:

[php]
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby

DeflateCompressionLevel 9

# Netscape 4.X has some problems
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Setup custom deflate log
# DeflateFilterNote Input instream
# DeflateFilterNote Output outstream
# DeflateFilterNote Ratio ratio
#
# LogFormat ‘"%r" %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate
# Example of log file (add to vhosts)
# CustomLog logs/deflate_log DEFLATE
</IfModule>
[/php]

Você pode tirar os comentários da última parte para criar um log escial só para o deflate.