Optimizar Apache - Eliminación de módulos que no vamos a utilizar - Parte I
kitai
Normalmente, cuando instalamos Apache por defecto, vienen activados bastantes módulos que, sencillamente, no vamos a utilizar. La forma de eliminar dichos módulos extra, y ganar así un poco más de rendimiento, varía según cómo lo hayamos instalado.
Si hemos instalado directamente desde un paquete RPM (Redhat y variantes) o DEB (Debian), los módulos se cargan de manera dinámica, y para desactivarlos basta con irnos al fichero de configuración httpd.conf y comentar (añadiendo un # al principio) la línea LoadModule referente al módulo que queremos eliminar.
Es fácil, pero antes de desactivar cada módulo, mejor saber para qué sirve…
Por ejemplo, en mi instalación de CentOS aparecen los siguientes módulos cargados.
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule auth_ldap_module modules/mod_auth_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
Vamos a explicar paso a paso qué modulos pueden sobrar y cuales nos quedamos.
LoadModule auth_dbm_module modules/mod_auth_dbm.so
Este módulo sirve para autenticar a usuarios contra ficheros DBM. Como normalmente guardaremos los usuarios en sencillos ficheros “htpasswd” o en base de datos, mi opinión personal es eliminarlo.
LoadModule auth_anon_module modules/mod_auth_anon.so
Permite utilizar usuarios tipo “anonymous”, como en los servidores FTP. No es algo que se use casi nunca porque normalmente, cuando restringes un determinado directorio a un usuario, se prefiere que sea con login y password por sencillez.
LoadModule auth_digest_module modules/mod_auth_digest.so
Tremendamente parecido al anterior, pero encima los desarrolladores especifican que este es un modulo experimental
LoadModule ldap_module modules/mod_ldap.so
LoadModule auth_ldap_module modules/mod_auth_ldap.so
Si se va a realizar autenticación contra LDAP o algún módulo de terceros que lo necesite, es necesario activarlos. En una configuración básica, no son útiles. Más información sobre LDAP en www.ldap-es.org.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
Los módulos para poder realizar Proxy no es algo que se suela utilizar de inicio. Por Proxy se entiende el redirigir conexiones de manera transparente al usuario a otros servidores, entre otros trucos que permite, como el balanceo de peticiones. Personalmente lo desactivo siempre de inicio y lo activo en caso de necesidad.
LoadModule status_module modules/mod_status.so
Mod_status permite obtener datos sobre las páginas que estén siendo visitadas, y la carga que tiene el servidor. Suena muy útil, pero es una página que sólo se suele consultar cuando aparece algún problema de rendimiento en Apache. Sobra decir que sólo debería activarse en dichos casos, y es una de las recomendaciones más comunes a la hora de optimizar el rendimiento de servidores.
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
Activar tan sólo si se van a utilizar las WebDAV para poder editar ficheros en el servidor.
LoadModule userdir_module modules/mod_userdir.so
Este módulo se encarga de dirigir peticiones a carpetas de usuarios, al estilo http://miservidorweb.com/~pepitoperez . Activar tan sólo si se va a dar servicio a carpetas de usuarios con ese estilo.
LoadModule rewrite_module modules/mod_rewrite.so
Activar este módulo depende de si vamos a realizar reescritura de URL’s, es decir, si vamos a redirigir http://www.miservidor.com/pagina1.htm a http://www.miservidor2.com/web/%pagina2.htm, de manera transparente. Hablaré más sobre este módulo en posteriores artículos.
Importante, si se va a utilizar las directivas Redirect y RedirectMatch, para redirecciones sencillas de URLs, no hace falta tener activado este módulo.
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Si vamos a dar servicio de hosting a multitud de usuarios, cada uno con su virtualhost, este módulo proporciona una buena manera de hacerlo. Pero si tenemos un servidor web sencillo con pocos virtualhost (para dar servicio a blogs), no merece la pena tenerlo cargado.
LoadModule suexec_module modules/mod_suexec.so
Permite ejecutar CGI’s bajo otros usuarios que no sea el mismo bajo el que corre Apache. A nivel de seguridad se considera bastante peligroso. Normalmente, antes de utilizar este módulo, recomiendo utilizar el servidor en un entorno cerrado (Jail), del cual ya hablaré en otro artículo.
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
Antes de utilizar los módulos de cache hay que tener en cuenta varios aspectos. Realmente mejoran mucho el rendimiento, sobre todo cuando se utiliza el módulo de cache en memoria (mod_mem_cache). Pero suelen dar problemas con determinadas aplicaciones y requieren más configuración de la que puede parecer inicialmente.
LoadModule usertrack_module modules/mod_usertrack.so
Si se desea realizar un seguimiento de la actividad de los usuarios haciendo un loggeo de las Cookies. Normalmente basta con tener el log normal y común de Apache, así que recomiendo desactivarlo de inicio.
LoadModule deflate_module modules/mod_deflate.so
Para comprimir las páginas que se envían al usuario. Sirve tanto para páginas estáticas como para páginas dinámicas. Antes de activarlo, hay que tener en cuenta las recomendaciones expuestas en el site de Apache, porque hay varios navegadores antiguos que tienen problemas a la hora de aceptar contenido comprimido. También suele dar problemas cuando hay proxies de por medio.
Si decidis comprimir el contenido para que la página tarde menos en cargar, revisad antes la web de Apache.org. Si tenéis un servidor Apache version 1.3, podeis utilizar el módulo de compresión mod_gzip.
LoadModule autoindex_module modules/mod_autoindex.so
Para mostrar el contenido de los directorios. Como si hicieras un “dir” en Windows o un “ls” en linux. Por ejemplo, la página de RedIRIS de Apache. ¿Merece la pena activarlo? En principio, salvo que vayais a servidor ficheros utilizando el servidor web, no demasiado. Puede ser un problema de seguridad porque, si se deja abierto, puede mostrar páginas que el desarrollador no quiere que se muestren, como por ejemplo páginas antiguas de debug o ficheros con datos importantes que no están linkados en la web, pero si están en los directorios.
LoadModule cern_meta_module modules/mod_cern_meta.so
Para poder enviar cabeceras con información extra al servidor. Podeis encontrar más información en la web del CERN, pero realmente es algo que se utiliza poco, al menos a través de este módulo.
LoadModule expires_module modules/mod_expires.so
Para especificar el periodo de validez de un documento, a través de campos que los proxies y navegadores leen para determinar si un fichero es actual o no.
Se puede eliminar, y lo más normal es añadir en la cabecera de los propios documentos una etiqueta META con los datos necesarios.
LoadModule asis_module modules/mod_asis.so
Interesante () módulo que permite eliminar cabeceras a la hora de enviar un documento y enviarlo “tal y como es” (as is).
LoadModule speling_module modules/mod_speling.so
Corrige las URLs mal escritas de los usuarios, como por ejemplo, en caso de teclear http://www.miservidor.com/indxe.htm, serviría correctamente la página index.htm.
LoadModule info_module modules/mod_info.so
Perfecto para poder visualizar la información que contienen tus ficheros de configuración desde la web. El problema es que si no se restringe la URL de acceso, cualquiera podrá ver el contenido de tus ficheros de configuración.
De una lista de 43 modulos que teníamos inicialmente, nos quedamos con esta reducida lista de útiles módulos que realmente vamos a usar en el día a día de nuestro servidor web. Los módulos nominados son….
LoadModule include_module modules/mod_include.so Para inclusión de otros ficheros de configuración.
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so Módulos de autenticación básica.
LoadModule log_config_module modules/mod_log_config.so Para configurar el formato de los ficheros de Log.
LoadModule cgi_module modules/mod_cgi.so Para ejecución de scripts y CGIs.
LoadModule alias_module modules/mod_alias.so Para poder mapear direcciones. P.ej: /directorio1/ a /directorio2/contenido/.
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so Módulos para enviar cabeceras modificadas, y para forzar determinados parámetros a navegadores antiguos que tenían ciertos problemas a la hora de ver ciertos tipos de contenido.
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so Para servir correctamente tipos de fichero que no sean de texto así como para la correcta visualización de los diferentes códigos de idiomas y caracteres.
LoadModule dir_module modules/mod_dir.so Para poder especificar que documento se ha de ver primero de un directorio.
LoadModule actions_module modules/mod_actions.so Necesario para configurar en el servidor PHP, entre otros.
Trás eliminar dichos módulos de nuestro servidor web, podemos eliminar las directivas que ya no son necesarias, con lo cual nuestro fichero de configuración se verá ampliamente simplificado.
Para finalizar, reiniciamos el servidor Web. Es posible que surja algún problema dependiendo de la configuración que proporcione cada distribucion de linux (o Windows), pero serán seguramente líneas de configuración que hay que limpiar. En el fichero error_log de nuestro servidor, aparecerá la línea exacta donde está fallando.
Cuando hayamos terminado, nuestro servidor web ocupará BASTANTE menos memoría del sistema, y funcionará “algo” (mejoras de un 5-10%) mejor, debido a los chequeos de módulos en desuso que hemos eliminado de la configuración.
Esta es la solución ideal para el administrador que desee una solución rápida y fácil para optimizar su configuración, debido a que las instalaciones que parten de ficheros rpm o deb suelen llevar demasiada funcionalidad extra que el usuario final no va a utilizar jamás.
Para administradores algo más comprometidos y con algo más de tiempo, lo mejor es compilar Apache desde el inicio, seleccionando sólo aquellos módulos que deseamos cargar. ¿Cómo hacer esto? En el siguiente artículo…
Posted in General, Optimización |
Diciembre 2nd, 2006 at 8:51
Excelente resumen, solo una acotación, en Debian se recomienda en uso de los comandos a2enmod/a2dismod para la activación/desactivación de módulos.
Febrero 1st, 2007 at 2:13
Excelente propuesta y explicación del apache. Me ha sido muy utíl en una implementación que estoy realizando.
Saludos,
Noviembre 17th, 2007 at 10:15
[...] Elimina los módulos de apache innecesarios. [...]