Archive for febrero, 2007
Compresión web con Mod_gzip y Apache en OpenBSD
Mod_gzip es un módulo que permite a Apache comprimir al vuelo las peticiones HTTP y enviárselas comprimidas al cliente siendo el navegador de éste quién las descomprime, la ventaja es evidente, si los ficheros pesan menos, tardaremos menos tiempo en transferirlos y ahorraremos ancho de banda. Como mi servidor corre en OpenBSD, la versión de Apache es la que trae la propia distribución, es decir Apache 1, para Apache 2 no existe mod_gzip sino mod_deflate. Bueno empezamos (haremos todo como root):
Buscamos el paquete en el FTP de OpenBSD y lo instalamos:
$ pkg_add -r ftp://www.openbsd.org/pub/OpenBSD/4.0/packages/i386/mod_gzip-1.3.26.1ap0.tgz
Activamos el módulo:
$ /usr/local/sbin/mod_gzip-enable
Indicamos a Apache el fichero de configuración de mod_gzip. Por tanto editamos el fichero /var/www/conf/httpd.conf y añadimos después de la linea LoadModule gzip_module /usr/lib/apache/modules/mod_gzip.so:
# Config of mod_gzip module
# The sample config file is in /usr/local/share/examples/mod_gzip/mod_gzip.conf.sample
< IfModule mod_gzip.c>
Include /var/www/conf/mod_gzip.conf
En realidad podríamos configurar los parámetros de mod_gzip dentro de y pero mejor lo hacemos en un fichero aparte, asi pues creamos el fichero /var/www/conf/mod_gzip.conf con el siguiente contenido:
#Fichero de configuracion mod_gzip.conf
# Oscar Moreno Martin (http://migranpipa.dyndns.org)
# The sample config file is in /usr/local/share/examples/mod_gzip/mod_gzip.conf.sample
# mod_gzip config file
#mod_gzip always on
# ============
mod_gzip_on Yes
############
### file sizes ###
###########
mod_gzip_minimum_file_size 300
mod_gzip_maximum_file_size 60000
mod_gzip_maximum_inmem_size 100000
##################
### data management ###
#################
mod_gzip_keep_workfiles No
mod_gzip_temp_dir /tmp
mod_gzip_command_version ‘/mod_gzip_status’
mod_gzip_dechunk Yes
############
### logging ###
###########
LogFormat «%h %l %u %t \»%V %r\» % < s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n – < Out:%{mod_gzip_output_size}n = %{mod_gzip_compression_ratio}n pct.» common_with_mod_gzip_info2
CustomLog /var/www/logs/mod_gzip.log common_with_mod_gzip_info2
###########
### filters ###
##########
# phase 1: (reqheader, uri, file, handler)
# =======================
mod_gzip_item_include file \.html$
mod_gzip_item_include file \.jsp$
mod_gzip_item_include file \.php$
mod_gzip_item_include file \.pl$
# phase 2: (mime, rspheader)
# ================
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-httpd-php
mod_gzip_item_include mime ^httpd/unix-directory$
mod_gzip_item_include handler ^perl-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
# Exclude files with extensions
# =================
mod_gzip_item_exclude file \.css$
mod_gzip_item_exclude file \.js$
mod_gzip_item_exclude mime ^image/.*
# Fin del fichero
El fichero lo puedes descargar desde aqui ya que si copias y pegas puede darte un fichero raro pues wordpress mete saltos de lineas y cosas raras dando lugar a un fichero erróneo.
Ahora creamos el fichero de log:
$ touch /var/www/logs/mod_gzip.log
Reiniciamos Apache:
$ apachectl restart
Ahora vamos a probar si mod_gzip esta funcionando, abrimos un navegador y vamos a http://tusitioweb/mog_gzip_status, en mi caso http://migranpipa.dyndns.org/mod_gzip_status
Debe aparecer algo como:
mod_gzip is available…
mod_gzip_version = 1.3.26.1a
mod_gzip_on = Yes
Podemos probar el ratio de compresión en http://web-sniffer.net/ escribimos la dirección de nuestra web y nos muestra entre otras cosas las cabeceras HTTP y el tamaño comprimido (encoded) y sin comprimir (decoded). Por ejemplo mi página principal dió los valores:
Content (encoded: 13.50 KiB / decoded: 54.11 KiB)
La compresión es bastante notable, muy recomendable para servidores caseros como éste, en el cual no tenemos mucho ancho de banda de subida.