Activar la compresión gzip en Apache (httpd)
Introducción
En este artículo os voy a explicar como servir comprimido el contenido a través del servidor de aplicaciones httpd de Apache. La gente no suele tener esto en cuenta y la verdad es que haciendo esto podemos hacer que nuestras páginas web carguen mucho más rápido ya que el tamaño que se va a tener que descargar el navegador será mucho menor.
Configuración
Lo primero que tendremos que hacer es elegir que tipo de contenido queremos servir comprimido (normalmente es todo el que sea texto). Una lista de los tipos de contenido que se suele comprimir es el siguiente:
- text/plain
- text/html
- text/xml
- text/gml
- text/css
- application/json
- application/xml
- application/xhtml+xml
- application/rss+xml
- application/javascript
- application/x-javascript
Como no siempre apache sabe el tipo de contenido que tiene un fichero, también podremos indicarle que ficheros servir comprimidos a través de sus extensiones. Estas suelen ser: html, xml, gml, js, css.
Para servir comprimido estos tipos de contenido, lo que tendremos que hacer es cargar el módulo deflate y activarlo. Luego tendremos que indicar que tipo de contenido y que archivos (a través de su extensión) queremos comprimir. Para ello tendremos que añadir las siguientes líneas a nuestro fichero de configuración de Apache httpd.conf:
LoadModule deflate_module modules/mod_deflate.so <IfModule mod_deflate.c> # Activamos la compresión SetOutputFilter DEFLATE # Indicamos los tipos de contenido a comprimir AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/gml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript # Indicamos las extensiones de los ficheros a comprimir <files *.html> SetOutputFilter DEFLATE </files> <files *.xml> SetOutputFilter DEFLATE </files> <files *.gml> SetOutputFilter DEFLATE </files> <files *.json> SetOutputFilter DEFLATE </files> <files *.js> SetOutputFilter DEFLATE </files> <files *.css> SetOutputFilter DEFLATE </files> </IfModule>
Además tendremos que tener en cuenta, que si estamos usando la versión 2.4 del servidor de Apache httpd, tenemos que cargar también el módulo filter con la siguiente línea:
LoadModule filter_module modules/mod_filter.so
Por último tendremos que reiniciar el servicio para que cargue la nueva configuración. Si estamos en Windows desde el panel de control de los servicios o si estamos en Linux con el siguiente comando:
>> sudo service apache2 restart
Si estáis en linux y queréis comprobar si una url se esta sirviendo comprimida, podéis hacerlo ejecutando el siguiente comando (acordaros de sustituir la url).
>> wget --no-cache --header="accept-encoding: gzip" -S TU_URL 2>&1 | grep "Content-Encoding"
Si se ha devuelto comprimida, al ejecutar el comando os indicará: "Content-Encoding: gzip"