Secciones bajar

Primer módulo liberado para el Nginx

  • Este módulo permite marcar todas las páginas y hacer una limpieza extra. Todo al vuelo.
Por RAÚL RIVERO (SOITU)
Actualizado 29-04-2008 00:45 CET

Desde el punto de vista técnico, una de las primeras decisiones que teníamos que tomar, en el arranque de soitu.es, era el servidor HTTP que usaríamos. Otro día contaremos ese proceso --por qué y cómo se decidió usar Nginx y Apache-- pero una cosa que teníamos clara era que, se decidiese lo que se decidiese, tendríamos que meterle mano al código del servidor para hacer cosas que, de antemano, sabíamos que ninguno hacía.

El primer módulo necesario era uno que nos permitiese marcar todas las páginas que sirviéramos, sin importar cómo habían sido generadas. Nginx tiene un módulo que hace algo parecido, http_sub_module, pero que no hace otras muchas cosas que también queremos y que, soportarlas, implicaría reescribir totalmente el módulo. Cosa que hemos hecho.

En concreto, los requisitos eran:

  • Quitar todos los comentarios de las páginas usados para marcar y/o delimitar bloques en el diseño. Para ello era necesario decidir un formato de comentarios específico (ver más adelante).
  • Hacer una limpieza del HTML muy sencilla pero que nos evitase servir espacios en blanco o líneas vacías.
  • Ser capaz de, dadas unas marcas específicas, desactivar todas esas reescrituras y mantener el código tal cual fue escrito y/o almacenado.
  • Lo principal: poder añadir a todas las páginas trozos de código que nos permitiesen, por ejemplo, marcarlas con píxeles transparentes que, a modo de marca de agua, nos hagan poder contar páginas vistas y no simplemente servidas. Esto es muy importante porque, sin ir más lejos, es la forma que tienen OJD y/o Nielsen de contabilizar usuarios únicos. Por eso es imprescindible marcarlas todas y cada una de ellas.
  • Por supuesto, este último marcado debe poder desactivarse al vuelo. Por ejemplo, por exigencias de la publicidad y el lanzamiento condicional de Interstitials.

Todo esto teniendo en cuenta que todos los elementos que se sirven, HTML en general, pueden salir de un gestor de contenidos (donde se podrían llegar a hacer gran parte de esas limpiezas) o no. Es decir, parte de las páginas que se sirven, no pasan por el gestor, son generadas con DreamWeaver, el Scite o, directamente, con el vi. Por tanto, son ficheros dejados tal cual en el disco y, en el proceso de servir, no puede salir ni uno sin su procesado.

Limpiando y marcando las páginas

De esta forma, nació ngx_http_html_clean_filter_module.c que, mediante una máquina de estados finitos, procesa la página que se va a servir y hace las modificaciones necesarias.

Las marcas elegidas son:

  • Seré eliminado todo comentario que se ajuste al patrón:<!-- =lo que sea[...]= --> O sea, un comentario de la forma...<!-- ===== Inicio del bloque cabecera ===== --> desaparecerá del HTML servido pero no un<!-- Inicio del bloque cabecera -->
  • Si queremos que se respete un trozo de HTML hay que rodearlo de: <!-- = #IB[...] = -->
    aquí escribimos
    todo lo que queramos que
    se respete tal cual
    <!-- = #EB[...] = -->
    Y ese trozo de texto saldrá tal cual.
  • Si queremos, como veremos luego, que se use html_clean_xcldpxlcntrblock y no html_clean_pxlcntrblock debemos escribir un <!-- = #XP = --> antes del tag body.

Los parámetros son:

  • html_clean_types: funciona de modo similar al sub_filter_types del módulo ngx_http_sub_module. Por defecto, este módulo sólo se aplica a los text/html.
  • html_clean_pxlcntrblock: bloque de texto que se pegará tras la marca <body> de los HTML. Es decir, aquí es donde nosotros definimos el código HTML que añade un JavaScript a todas nuestras páginas y el píxel de contabilización. El nombre viene de PiXeLCouNTeRBLOCK.
  • html_clean_xcldpxlcntrblock: define el bloque de texto que se pegará en la página que contiene un <!-- = #XP = --> antes del body. Por ejemplo, nosotros lo usamos en las páginas que sólo contienen publicidad, que no deben ser contabilizadas como tales, o en las que sólo definen FRAMES, de forma que sólo se contabilicen aquellas que realmente tengan contenido.

Un ejemplo de uso es:

location / {
html_clean_active on;

# Pixel de contabilizacion y JS comun.
html_clean_pxlcntrblock '<div style="display:none">\
<img src="/pxlctl.gif" width="1" height="1" alt="" />\
<script language="Javascript" type="text/javascript" src="/comun.js">\
</script></div>';

# Solo JS comun.
html_clean_xcldpxlcntrblock '<div style="display:none">\
<script language="Javascript" type="text/javascript" src="/comun.js">\
</script></div>';
}

Código fuente

El código del nuevo módulo se distribuye en modo de parche. Debe aplicarse al fuente 0.6.29 y añade una nueva opción (--without-http_htmlclean_module) en el proceso de configuración.

Descarga de código fuente
MD5SUM14-Jul-2008 09:38150 bytes
nginx-0.6.29-HTMLCLEAN-20080403.patch.bz228-Apr-2008 23:198422 bytes

Di lo que quieras

Aceptar

Si quieres firmar tus comentarios puedes iniciar sesión »

En este espacio aparecerán los comentarios a los que hagas referencia. Por ejemplo, si escribes "comentario nº 3" en la caja de la izquierda, podrás ver el contenido de ese comentario aquí. Así te aseguras de que tu referencia es la correcta. No se permite código HTML en los comentarios.

Di lo que quieras

Lo sentimos, no puedes comentar esta noticia si no eres un usuario registrado y has iniciado sesión.
Si ya lo estás registrado puedes iniciar sesión ahora.

Volver a met Volver a portada
subir Subir al principio de la página