Mod_deflate permite despachar archivos comprimidos a través de Apache, los mismos son recogidos por los diferentes clientes que soportan la compresión (navegadores). Lo bueno de mod_deflate es que puede comprimir hasta un 60% o más los archivos de tu web, reduciendo así por lógica el consumo de transferencia. Lo malo es que también consumirá más CPU al realizar al compresión, pero bueno, si tu servidor puede soportarlo siempre es una buena opción.
Si bien este tutorial aplica a RHEL 5.3, también en CentOS debería funcionar sin problemas. Apache 2.2.3 que viene con RHEL 5.3 ya trae este módulo cargado en su configuración:
LoadModule deflate_module modules/mod_deflate.so
Por lo que nos tendremos que mover hacia el final de la lista de módulos y cargar la configuración del mismo, añadiendo estas líneas en el archivo /etc/httpd/conf/httpd.conf:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/x-js
AddOutputFilterByType DEFLATE text/css
# Highest 9 - Lowest 1
DeflateCompressionLevel 9
# Skip browsers with known problems
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
Luego de esto ya estaría todo listo, tan sólo hay que reiniciar Apache:
/etc/init.d/httpd restart
Anteriormente se definió el tipo de contenido que se comprimirá, nivel de compresión a aplicar y excepciones de la compresión para algunos navegadores que se sabe generan problemas.
Para verificar si nuestro contenido se está despachando correctamente con la compresión de mod_deflate podemos usar esta URL: http://www.whatsmyip.org/http_compression/
Si está bien podremos ver un mensaje parecido a este:
YES, your browser is requesting compressed content.
También puedes testearlo usando la herramienta para benchmarks de Apache:
[root@server conf]# ab -n 1 -v 4 -H "Accept-Encoding: gzip,deflate" "http://www.misitio.com/"
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.misitio.com (be patient)...INFO: POST header ==
---
GET / HTTP/1.0
User-Agent: ApacheBench/2.0.40-dev
Host: www.misitio.com
Accept: */*
Accept-Encoding: gzip,deflate<strong>
</strong>
---
LOG: header received:
HTTP/1.1 200 OK
Date: Wed, 02 Sep 2009 04:41:53 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=kaq3tp3pu8pmdt9eedpenpgd54; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 5418
Connection: close
Content-Type: text/html; charset=ISO-8859-1
Haz las pruebas con el módulo activado y sin él y verás diferencias en los valores:
Content-Encoding: gzip
Content-Length: 5418
Los logs de las consultas con sin compresión y con compresión también son bastante claros:
xxx.xxx.xxx.xx - - [01/Sep/2009:23:39:46 -0500] "GET / HTTP/1.0" 200 21404 "-" "ApacheBench/2.0.40-dev"
xxx.xxx.xxx.xx - - [01/Sep/2009:23:41:53 -0500] "GET / HTTP/1.0" 200 5418 "-" "ApacheBench/2.0.40-dev"
Como ves, la reducción del peso fué de un 75%