Creación de un Filter


Esta actividad práctica corresponde a este tema.

Para crear un nuevo filtro de contenidos en Apache debemos usar la directiva AddFilter. En esta actividad práctica vamos a habilitar el filtro que viene incluido en mod_deflate para comprimir los datos de las peticiones y aprovechar mejor el ancho de banda, de forma que se transmita la misma información ocupando el menor ancho de banda posible. Esto se puede conseguir de la siguiente forma:

  • Activar mod_deflate con el comando a2enmod deflate. La última versión de Apache ya viene con el activo y por tanto esto no es necesario.
  • Reiniciar Apache si finalmente se ha activado un mod nuevo.
  • Si se trabaja con una versión de Apache que no activa el mod_deflate por defecto, se deben añadir las siguientes líneas al fichero 000-default del directorio sites-available (o en el fichero de configuración del site donde quisiésemos aplicarlo). Un buen lugar para situarlo es dentro de la directiva VirtualHost *, debajo, por ejemplo, del email del administrador:
#Tipos MIME de los documentos procesados por Apache que el filtro comprimira
AddOutputFilterByType DEFLATE text/html text/plain text/xml

#Codigo para evitar incompatibilidades con navegadores BrowserMatch Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html #Definimos los parametros del deflate que vamos a logear
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info

#Formato del log de deflate que vamos a usar
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate

#Logs de las peticiones realizadas y de su procesamiento por deflate
CustomLog /var/log/apache2/deflate_log deflate


Instalación de un filter deflate (1)
  • Este filtro comprime el contenido en los tipos MIME comentados en su primera, aunque podríamos añadir más. El código contiene también una serie de líneas para tratar con navegadores y versiones de los mismos concretas, que sólo soportan compresión de ficheros HTML y no de ningún otro tipo de fichero adicional.
  • La última línea del fichero crea un log en /var/log/apache2 llamado deflate_log para ver los resultados de la compresión a medida que se van sirviendo páginas, o bien para observar posibles errores que se vayan produciendo.

Si la versión de Apache usada ya viene con mod_deflate activo por defecto, entonces poseerá una configuración básica que permita usarlo desde la propia instalación del servidor, que por defecto es ésta:

Instalación de un filter deflate (2)

En este caso, simplemente podemos añadirle las líneas de la configuración anterior que especifican como crear el log de las peticiones para ver cómo funciona el mod, quedando pues la configuración así:

<IfModule mod_deflate.c>
# these are known to be safe with MSIE 6
AddOutputFilterByType DEFLATE text/html text/plain text/xml

# everything else may cause problems with MSIE 6
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
AddOutputFilterByType DEFLATE application/rss+xml


DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info

#Formato del log de deflate que vamos a usar
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate

#Logs de las peticiones realizadas y de su procesamiento por deflate
CustomLog /var/log/apache2/deflate_log deflate
</IfModule>

Instalación de un filter deflate (3)

Esto, a diferencia de la primera configuración, activará el mod_deflate para todas las webs en lugar de para un host virtual concreto. Debemos elegir lo que queremos hacer pues en función de nuestras necesidades, pero no es conveniente mezclar ambas formas de uso del mod por si incurriésemos en contradicciones en la configuración. Para probar el funcionamiento de estas opciones debemos reiniciar el servidor y hacer una petición de una web cualquiera, comprobando que en /var/log/apache2 hay un deflate.log que va adquiriendo más contenido a medida que vamos haciendo peticiones:

Instalación de un filter deflate (4)

En caso de que todo sea correcto, se verá también cómo sólo se comprimen los tipos de documentos especificados y no lo hacen por ejemplo las imágenes, que comprimirían muy poco (la mayoría podrían estar ya en un formato con compresión incorporada y perderíamos rendimiento con muy escaso beneficio en ancho de banda.

Debido al carácter y extensión de este curso, no vamos a extendernos más en la descripción de los filtros, pero a continuación de darán unos detalles que pueden permitir al alumno profundizar más en este tema. Si examinamos el código que hemos adjuntado como ejemplo, podemos observar cómo cada filtro ha sido programado con unos parámetros y opciones de configuración concretos que debemos conocer antes de tratar de usarlo. Esto es así para cada filtro que queramos desplegar. En el caso del que nos ocupa, el siguiente enlace: http://httpd.apache.org/docs/2.2/mod/mod_deflate.html tiene toda la información acerca del mismo. Por otro lado, en la siguiente dirección tenemos un procedimiento de puesta en marcha del mod análogo al visto: http://www.howtoforge.com/apache2_mod_deflate mientras que en este otro: http://www.howtoforge.com/linux_apache_mod_gzip se describe cómo usar un módulo de propósito similar, mod_gzip.

Finalmente, cabe decir que los módulos deben ser programados siguiendo unas pautas determinadas, usando unas determinadas librerías y facilidades que nos permitan interactuar con el servidor. Esto excede el nivel de este curso, pero se dan los siguientes enlaces para profundizar en el tema:

Última modificación: jueves, 19 de agosto de 2010, 16:55