Iniciar sesión | Registrarse | ¿Por qué registrarse?
  • Podrás comentar las noticias con el nombre que elijas
  • Podrás subir tus noticias en soitu.es y guardarlas en tu propia página
ngx_http_html_clean_filter_module.c

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, regístrate o inicia 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 quieres, puedes registrarte o, si ya lo estás, iniciar sesión ahora.

Nuestra selección

Hasta la vista y gracias

Soitu.es se despide 22 meses después de iniciar su andadura en la Red. Con tristeza pero con mucha gratitud a todos vosotros.

El suplicio (o no) de viajar en tren en EEUU

Fuimos a EEUU a probar su tren. Aquí están las conclusiones. Mal, mal...

Presidimos la UE: que no falten los regalos para los periodistas

Algunos países ven esta práctica más cerca del soborno.

Soitu.es vuelve a ganar el premio de la ONA

A la 'excelencia general' entre los medios grandes en lengua no inglesa.

Tecnología
18:23

Políticos con iPad »

Para bien o para mal, el iPad se ha convertido en un habitual en muchas conversaciones. Ya sea para romper el hielo antes de una reunión o con el café en una comida familiar: defensores y detractores del aparato de Apple salen por doquier. ¿Es para tanto? ¿Vale la pena hacerse con uno? ¿No hace lo mismo que un ordenador?

En: E-Campany@

Recomendación: Albert Medrán

17:21

en La Casa Blanca libera código »

La Administración de Obama sigue dando ejemplo de apertura tecnológica al resto de los gobiernos del mundo: si una de sus banderas es la apertura de datos, ahora te toca al código fuente de módulos de Drupal Traducir »

En: radar.oreilly.com

Recomendación: Raúl Rivero

13:31

en infografia El imparable crecimiento de Internet »

En la BBC han hecho un gráfico impresionante sobre la evolución de Internet entre 1998 y 2008. Visto en elblogsalmon.com Traducir »

En: bbc.co.uk

Recomendación: mami

Estos son nuestros Selectores »

Lo más visto
1

Cómo sellar el paro por internet

RAMÓN PECO (SOITU.ES)
2

Sexo oral para ella

M. PÉREZ, J. J. BORRÁS Y X. ZUBIETA (SOITU.ES)
4

¿Qué es el sexo?

M. PÉREZ, J.J. BORRÁS y X. ZUBIETA (SOITU.ES)
5

Cómo masturbarse adecuadamente

M. PÉREZ, J. J. BORRÁS Y X. ZUBIETA (SOITU.ES)
Widgets

Widget Liga 0910

Clasificación, calendario, equipos, etc. »

Widget El tiempo

Situación actual y previsión de cinco días »

Widget Estaciones de esquí

Estado de las estaciones de esquí »

Widget Loterías y Sorteos

ONCE, Quiniela, Primitiva, etc. »

[Premio ONA a la excelencia en webs de habla no inglesa] [Premio al mejor diseño en internet y a la innovación]