SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 18 de diciembre de 2009

Instalar Apache Mod GZip Solaris 10 64bits

Introducción
Vamos a instalar mod_gzip sobre Apache 1.3.41 en Solaris 10 en 64bits para, continuando con la serie de Optimización de páginas web en Solaris, en esta ocasión nuestro objeto será optimizar el tamaño de transferencia de nuestras páginas web.

Este módulo nos va a permitir comprimir las páginas "al vuelo" utilizando el formato de compresión GZIP. Los navegadores actuales, soportan el envío de páginas web en formato gzip de forma nativa, y por lo tanto, no deberemos hacer ningún cambio en los clientes.

El servidor Apache será el encargado de decidir si el cliente es capáz de entender el formato comprimido analizando la cabecera Accept-Encoding y verificando que contiene el valor de  gzip o deflate, si tiene esta cabecera, entonces Apache enviará el contenido comprimido en formato gzip, si no es así, lo enviará en formato plano.

La cabecera que debe contener será la siguiente:
Accept-Encoding: gzip,deflate
Al reducir el tamaño a enviar, haremos que nuestro servicio sea más rápido, sin embargo, debemos tener en cuenta que estamos cargando al servidor con el proceso de compresión al vuelo de nuestras páginas web, sin embargo, esto es fácilmente solucionable introduciendo proxys reversos para descargar al Apache.

Veamos cómo podemos compilar y configurar Mod_Gzip en nuestro Apache 1.3.41 64bits sobre Solaris.


Nota Importante sobre GCC y Expat en Solaris 10

Ya os he comentado en post anteriores los problemas que existen al Compilar Apache HTTP Server en 64bits con GCC en Solaris 10, y Problemas de Compilación de Apache HTTP Server y Mod JK con GCC 64bits en Solaris 10, así que os remito a Compilar Apache HTTP Server en 64bits con SunCC en Solaris 10 para poder continuar.

Si tenéis compilado vuestro Apache con GCC en 64bits, el módulo de mod_gzip no funcionará, aunque compile perfectamente.


Bajamos y descomprimimos el Source Code de Mod Gzip 
Podemos descargar el código fuente de mod_gzip desde SourceForge, donde tiene alojada la página principal. Una cosa que nos llama la atención es que la última versión es la 1.3.26a del año 2002, así que es una versión muy estable, :D

$ wget http://downloads.sourceforge.net/project/mod-gzip/mod-gzip13x/mod_gzip-1.3.26.1a/mod_gzip-1.3.26.1a.tgz?use_mirror=sunet
$ gtar zxpf mod_gzip-1.3.26.1a.tgz
Compilamos e Instalamos el Módulo
Antes de poder compilar el módulo, debemos hacer algunos cambios en el <Makefile> ya que por defecto tiene los modifcadores para GCC, y por lo tanto, debemos adaptarlos a SunCC.

Así que buscaremos el archivo <Makefile> ubicado en $MOD_GZIP_HOME/Makefile y sustituiremos la entrada del tag <build>
$(APXS) -Wc,-Wall,-O3,-fomit-frame-pointer,-pipe -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so
Por la siguiente
$(APXS) -Wc,-m64 -Wc,-O3 -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so
Sólo una nota para GCC 32bits
Para aquellos que tenéis el Apache HTTP Server en 32bits compilado con GCC, el parámetro de optimización se encuentra en su nivel máximo -O3, y este valor provoca que se produzcan muchos coredump, además de ser un nivel que no se debe utilizar según GCC a no ser que se tenga muy testeado. Después de muchos Apaches con mod_gzip instalados, puedo asegurarte que con este flag en 32bits, falla, y falla mucho, así que mi recomendación es dejarlo en -O2 para GCC, por lo tanto, quedaría así:
 $(APXS) -Wc,-Wall,-O2,-fomit-frame-pointer,-pipe -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o mod_gzip.so

Además vamos a utilizar el comando <GNU Make> en vez de <Make> y de esta forma, nuestro mod_gzip no nos dará problemas (aunque con <make> tampoco protesta ;) )
$ cd mod_gzip-1.3.26.1a
$ gmake APXS=/opt/www/apache-1.3.41/64/bin/apxs
$ su
password:
# gmake APXS=/opt/www/apache-1.3.41/64/bin/apxs install
/opt/www/apache-1.3.41/64/bin/apxs -A -i mod_gzip.so
[preparing module `gzip' in /opt/www/apache-1.3.41/64/conf/httpd.conf]
cp mod_gzip.so /opt/www/apache-1.3.41/64/libexec/mod_gzip.so
chmod 755 /opt/www/apache-1.3.41/64/libexec/mod_gzip.so
cp /opt/www/apache-1.3.41/64/conf/httpd.conf /opt/www/apache-1.3.41/64/conf/httpd.conf.bak
cp /opt/www/apache-1.3.41/64/conf/httpd.conf.new /opt/www/apache-1.3.41/64/conf/httpd.conf
rm /opt/www/apache-1.3.41/64/conf/httpd.conf.new
Configuración Mog Gzip
Dentro del directorio donde hemos descomprimido mod_gzip <MOD_GZIP_HOME> encontraremos un archivo de ejemplo <mod_gzip.conf.sample> que podemos utilizar para ir comprobando el funcionamiento. Podemos copiar este template en $APACHE_HOME/conf/extra/modules/mod_gzip.conf y utilizando la directiva <Include> de configuración de Apache podemos añadirlo tanto a nuestro servidor principal, o a los VirtualHost que deseemos, por ejemplo podemos tener lo siguiente en nuestro $APACHE_HOME/conf/http.conf
#############################################
# CARGA DE MODULOS
#############################################
LoadModule gzip_module        libexec/mod_gzip.so
#################################################
## MOD_GZIP
#################################################
Include conf/extra/modules/modgzip.conf

Conclusiones
Salvo el problema con GCC en 64bits, la instalación de mod_gzip en Solaris 10 no es más complicada que otro módulo, además nos permite utilizarlo de forma muy flexible sólo en aquellos lugares donde nos interese.

Recordar que debemos comprobar el rendimiento obtenido mediante Pruebas de JMeter para Web y de esta forma, ver cómo vamos mejorando <o no> nuestro sistema desde la base

Referencias

No hay comentarios:

Publicar un comentario