Activar compresión en Internet information Services, IIS 6.0

Buenos días, cuando nos encontramos con un servidor web en producción una de las muchas preguntas que debemos responder es: ¿Es posible comprimir el trafico?. La respuesta por lo general y salvo raras excepciones es que SI que se puede comprimir el trafico. Esta practica nos reporta ciertos beneficios y algún inconveniente por eso se recomienda ponerla en practica salvo las raras excepciones mencionadas anteriormente ya que optimizaremos el entorno de producción. En este articulo vamos a tratar como se configura la compresión en IIS 6.0 que es donde actualmente lo he podido probar, para diferentes versiones del servicio imagino que no debería haber muchas diferencias pero no lo puedo asegurar.

Al comprimir parte del trafico saliente volumen total será menor. No os ilusionéis que esto no es el paradigma del ahorro, algo de trafico se reduce pero una parte normalmente pequeña ya que se comprime el texto, los scripts, las CSS, pero no las imágenes, videos, flash, etc…que son los archivos que realmente aumentan considerablemente nuestro consumo de ancho de banda. Esto se traduce en dos cosas:

  • Un incremento del consumo de CPU (El servidor tiene que comprimir tarde o temprano el contenido que va a servir y el cliente tiene que descomprimir el contenido servido)
  • Sensación de menor tiempo de carga por parte del cliente.

Realmente el efecto en si es positivo ya que por un incremento mínimo en el uso de CPU reducimos trafico y damos sensación de mayor velocidad de carga.

El proceso de activación de esta característica es sencillo, eso si hay que seguir las instrucciones al pie de la letra y si después de completar el proceso seguís sin ser capaces de servir el contenido comprimido echarle un ojo a los consejos que pongo o en su defecto preguntarle a Google un rato. No os desesperéis.

1. Activar compresión HTTP en el Administrador de IIS

1.1. Abrir Administrador de Internet Information Services.

         Administrador de Internet Information Services (IIS)

1.2. Pulsa el botón derecho de tu ratón sobre el nodo Sitios Web y selecciona la opción Propiedades.

1.3. Aparecerá una ventana con la siguiente imagen. Nos desplazamos a la pestaña Servicio y ahí seleccionamos las opciones Comprimir archivos de aplicación y Comprimir archivos estáticos. También podemos seleccionar aquí la carpeta que actuara como directorio temporal para los contenidos comprimidos así como de los limites de tamaño o carencia de los mismos. Personalmente prefiero tener limitado esta carpeta (Normalmente con 1 GB es mas que suficiente) ya que así no me llevo menos sorpresas a la larga.

Propiedades de Sitios Web IIS

1.4. Aplicamos y aceptamos.

2. Configurar la metabase de IIS para que comprima según nuestras necesidades.

2.1 Parámetros previos. Antes de continuar deberíamos decidir sobre que opciones de compresión, como vamos a configurar el IIS, que archivos vamos a comprimir, como de critico es comprimir frente al consumo de CPU, etc… .

2.2 Configuración de IIS. Para poder continuar con el proceso de configuración de nuestros IIS necesitamos editar ciertos parámetros de la metabase. Para ello podemos o utilizar el script adsutil o editar directamente el archivo de configuración con el editor de texto que mas nos guste. En mi caso recomiendo parametrizar por scripts y revisar la configuración directamente con el bloc de notas.

Si se modifica erróneamente el archivo de la metabase podemos quedarnos con el IIS frito así que cuidado al editar a mano

Si queremos editar con scripts, deberemos dirigirnos desde consola a C:inetpubadminscripts y desde ahí ir ejecutando los comandos que necesitemos.

Si queremos editar directamente deberíamos tener activada la opción de  Habilitar la modificación directa de archivos de metabase que aparece en el Administrador de Internet Information Services > HOSTNAME (Equipo local) > Propiedades.

Propiedades de equipo local IIS

Una vez hemos comprobado que tenemos activada la opción nos dirigiremos a WindowsSystem32InetsrvMetaBase.xml y lo modificamos con el editor que prefiramos.

2.3 Establecer nivel de compresión. Aquí por consenso general se suele configurar el nivel 9 que es el optimo entre consumo de CPU y compresión del contenido. Una compresión mayor dispara demasiado el consumo de CPU en para los que ganamos en compresión y a la inversa para niveles inferiores.

cscript adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel “9”
cscript adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel “9”

O si preferimos editarlo a mano buscamos los nodos IIsCompressionScheme de GZIP y de DEFLATE. Una vez localizados cambiamos el parámetro:

De HcDynamicCompressionLevel “x” a HcDynamicCompressionLevel “9”

2.4 Definir contenido estático a comprimir. Aquí como venimos con los deberes hechos, sabremos que extensiones de archivos estáticos nos interesa comprimir.

cscript adsutil.vbs SET W3SVC/Filters/Compression/Deflate/HcFileExtensions “htm” “html” “css” “txt” “js”
cscript adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcFileExtensions “htm” “html” “css” “txt” “js”

O si preferimos editarlo a mano buscamos los nodos IIsCompressionScheme de GZIP y de DEFLATE. Una vez localizados cambiamos el parámetro:

De HcFileExtensions “x” a HcFileExtensions “htm” “html” “css” “txt” “js”

2.5 Definir contenido dinámico a comprimir.

cscript adsutil.vbs SET W3SVC/Filters/Compression/Deflate/HcScriptFileExtensions “asp” “dll” “aspx” “ashx”
cscript adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcScriptFileExtensions “asp” “dll” “aspx” “ashx”

O si preferimos editarlo a mano buscamos los nodos IIsCompressionScheme de GZIP y de DEFLATE. Una vez localizados cambiamos el parámetro:

De HcScriptFileExtensions “x” a HcScriptFileExtensions “asp” “dll” “aspx” “ashx”

3. Comprobar el correcto funcionamiento de la compresión.

3.1. Reiniciar IIS. Para asegurarnos de que se cargan correcta y completamente los parámetros que acabamos de configurar en la metabase reiniciamos IIS ejecutando el comando iisrestart.

3.2. Comprobamos si se están comprimiendo correctamente las web servidas. Para ello podemos utilizar algún servicio en la nube o Cloud service (Si la puta nube) para comprobarlo como puede ser www.pipeboost.com o www.turboiis.com o directamente desde algún proxy o sistema que nos permita analizar las cabeceras HTTP intercambiadas desde nuestro navegador con el servicio web. Para esta segunda opción recomiendo por simpleza y potencia Fiddler.

Response Headers Fiddler

4. Consejos y resolución de problemas.

4.1. Recuerda reiniciar el IIS después de realizar modificaciones en la metabase

4.2. Revisa que las extensiones definidas para comprimir los archivos tanto estáticos como dinámicos se muestran correctamente en el archivo de la metabase. Con correctamente y aunque parezca extraño deberían aparecer cada extensión en una línea distinta. Parece una chorrada pero después de estar un rato pegándome de cabezazos contra la pared esto hizo que funcionase la dichosa compresión.

2 comments

Comments are closed.