apache

Configurar mod_deflate en Apache

Wednesday, September 2nd, 2009

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 &lt;$Revision: 1.146 $&gt; 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% :D

Exportando reglas de .htaccess a httpd.conf

Saturday, February 7th, 2009

Si estás manejando un servidor dedicado de alto tráfico, y tienes pocos sitios que manejan reglas de .htaccess, explicaré una buena medida para evitar sobrecargas y tiempos de espera innecesarios por parte del servidor web Apache

En este caso la idea es mover las reglas de un .htaccess directamente al archivo de configuración de apache, httpd.conf, para que las reglas se carguen al inicio del sistema o cuando reinicias el servicio, evitando así la lectura del archivo .htaccess ante cada consulta.

La solución: copias el contenido entero de tu archivo .htaccess, y lo pegas en el archivo httpd.conf, con la siguiente sintáxis dentro de dos tags “Directory”, indica la ruta absoluta el sitio:

httpd-htaccess-conf

Luego reinicias el servidor apache, y ya debería tomar los cambios. Para asegurarte de que lo está leyendo desde Apache y no desde el .htaccess, simplemente renombra el .htaccess a un nombre temporal, y si luego de verificar todo en tu web, si no falla, quiere decir que lo está levantando bien :D