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).
El autor de este post es: Emiliano Marini
No hay comentarios:
Publicar un comentario