Apache: cómo listar módulos cargados/disponibles

Valoración del Usuario:  / 0
MaloBueno 

El objetivo de este artículo es demostrar de qué forma es posible obtener un listado de módulos de Apache que se encuentran actualmente cargados y cuales se encuentran disponibles.

La mayoría de las funcionalidades del servidor HTTP Apache son provistas a través de módulos. Un módulo puede ser estático (static) o compartido (shared). Un módulo estático se incluye en el binario de Apache en tiempo de compilación, por lo que siempre está disponible. Un modulo compartido se carga en tiempo de ejecución mediante una directiva LoadModule en la configuración de Apache. Esto implica que es posible instalar un módulo compartido en un sistema, pero que no sea cargado por Apache (por lo tanto no sea utilizable).



Esto es un error de configuración que sucede a menudo. Por ejemplo, cuando se intentan utilizar las directivas RewriteEngine y RewriteRule, pero Apache falla al iniciar con el siguiente error:

Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

Esto es un indicio de que el módulo "mod_rewrite" no ha sido cargado. En tal caso es posible comentar las directivas que impiden iniciar el servidor Apache utilizando caracteres '#' (comentarios), directivas <IfDefine> (para deshabilitar un bloque dentro de un archivo de configuración) o el comando a2dissite para deshabilitar completamente el VirtualHost cuya configuración es incorrecta.

Para obtener una lista de módulos cargados (con el fin de diagnosticar errores) es posible utilizar la herramienta apachectl o apache2ctl, la cual se provee para interactuar y controlar el servidor HTTP Apache. Cualquiera de los siguientes comandos retornan la lista de módulos cargados (tanto estáticos como compartidos):

apachectl -M
apache2ctl -M
apachectl -t -D DUMP_MODULES
apache2ctl -t -D DUMP_MODULES

Por ejemplo, en un servidor Debian 6:

root@webserver:~# apache2ctl -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 perl_module (shared)
 php5_module (shared)
 python_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK                                                                                                            

Los nombres listados son identificadores de módulos, los cuales no coinciden con los nombres por los cuales son usualmente conocidos. Para convertir al nombre conocido, la convención usual es remover el sufijo "_module" y agregar el prefijo "_mod". Por ejemplo el modulo identificado como "rewrite_module" es conocido comúnmente como "mod_rewrite".

Si se desea determinar rápidamente si un módulo se encuentra cargado es posible redireccionar la salida del comando apachectl a la entrada de grep utilizando un pipe, por ejemplo:

root@webserver:~# apache2ctl -M | grep -i rewrite
 rewrite_module (shared)
Syntax OK

De esa forma es posible saber rápidamente si mod_rewrite se encuentra cargado.

Por otro lado, para saber qué módulos tiene disponible un sistema solo hace falta listar el directorio donde se encuentran instalados:

root@webserver:~# ls -lh /usr/lib/apache2/modules/
total 11M
-rw-r--r-- 1 root root 8.8K Mar  3  2013 httpd.exp
-rw-r--r-- 1 root root 8.0M Mar  4  2013 libphp5.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_actions.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_alias.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_asis.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_auth_basic.so
-rw-r--r-- 1 root root  31K Mar  3  2013 mod_auth_digest.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authn_alias.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authn_anon.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authn_dbd.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authn_dbm.so
-rw-r--r-- 1 root root 6.3K Mar  3  2013 mod_authn_default.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authn_file.so
-rw-r--r-- 1 root root  27K Mar  3  2013 mod_authnz_ldap.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authz_dbm.so
-rw-r--r-- 1 root root 6.3K Mar  3  2013 mod_authz_default.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authz_groupfile.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authz_host.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authz_owner.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_authz_user.so
-rw-r--r-- 1 root root  35K Mar  3  2013 mod_autoindex.so
-rw-r--r-- 1 root root  39K Mar  3  2013 mod_cache.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_cern_meta.so
-rw-r--r-- 1 root root  36K Mar  3  2013 mod_cgid.so
-rw-r--r-- 1 root root  27K Mar  3  2013 mod_cgi.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_charset_lite.so
-rw-r--r-- 1 root root  51K Mar  3  2013 mod_dav_fs.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_dav_lock.so
-rw-r--r-- 1 root root  92K Mar  3  2013 mod_dav.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_dbd.so            
-rw-r--r-- 1 root root  23K Mar  3  2013 mod_deflate.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_dir.so
-rw-r--r-- 1 root root  23K Mar  3  2013 mod_disk_cache.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_dumpio.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_env.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_expires.so
-rw-r--r-- 1 root root  23K Mar  3  2013 mod_ext_filter.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_file_cache.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_filter.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_headers.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_ident.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_imagemap.so
-rw-r--r-- 1 root root  43K Mar  3  2013 mod_include.so
-rw-r--r-- 1 root root  23K Mar  3  2013 mod_info.so
-rw-r--r-- 1 root root  51K Mar  3  2013 mod_ldap.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_log_forensic.so
-rw-r--r-- 1 root root  27K Mar  3  2013 mod_mem_cache.so
-rw-r--r-- 1 root root  28K Mar  3  2013 mod_mime_magic.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_mime.so
-rw-r--r-- 1 root root  35K Mar  3  2013 mod_negotiation.so
-rw-r--r-- 1 root root 236K Mar 16  2013 mod_perl.so
-rw-r--r-- 1 root root  39K Mar  3  2013 mod_proxy_ajp.so
-rw-r--r-- 1 root root  27K Mar  3  2013 mod_proxy_balancer.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_proxy_connect.so
-rw-r--r-- 1 root root  35K Mar  3  2013 mod_proxy_ftp.so
-rw-r--r-- 1 root root  35K Mar  3  2013 mod_proxy_http.so
-rw-r--r-- 1 root root  19K Mar  3  2013 mod_proxy_scgi.so
-rw-r--r-- 1 root root  84K Mar  3  2013 mod_proxy.so
-rw-r--r-- 1 root root 160K Jun 18  2010 mod_python.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_reqtimeout.so
-rw-r--r-- 1 root root  64K Mar  3  2013 mod_rewrite.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_setenvif.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_speling.so
-rw-r--r-- 1 root root 174K Mar  3  2013 mod_ssl.so
-rw-r--r-- 1 root root  23K Mar  3  2013 mod_status.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_substitute.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_suexec.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_unique_id.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_userdir.so
-rw-r--r-- 1 root root  15K Mar  3  2013 mod_usertrack.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_version.so
-rw-r--r-- 1 root root  11K Mar  3  2013 mod_vhost_alias.so

Los sistemas basados en Debian/Ubuntu utilizan el directorio /etc/apache2/mods-available para almacenar archivos de extensión ".load", los cuales poseen las directivas para cargar los módulos instalados:

root@webserver:~# cat /etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Para habilitar un módulo simplemente es necesario crear un enlace simbólico en el directorio mods-enabled que apunte al archivo ".load", para ello se utiliza la herramienta a2enmod (de la misma forma en que se utiliza a2ensite y a2dissite para habilitar y deshabilitar VirtualHost respectivamente):

root@webserver:~# a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

De la misma forma, para deshabilitar un módulo se utiliza a2dismod:

root@webserver:~# a2dismod rewrite
Module rewrite disabled.
Run '/etc/init.d/apache2 restart' to activate new configuration!

A diferencia de lo que sucede con los VirtualHost, donde cada vez que se habilita o deshabilita un sitio sólo es necesario recargar la configuración (/etc/init.d/apache2 reload), cada vez que se habilita o deshabilita un módulo es necesario reiniciar el servidor Apache (/etc/init.d/apache2 restart).



Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+