Introducción
Apache es actualmente el servidor web más utilizado en el mundo. Es un software de código abierto desarrollado hace más de veinte años y mantenido por la Apache Software Foundation. A partir de septiembre de 2020, se estima que está sirviendo al 35% de todo el tráfico de sitios web en el mundo.
Los desarrolladores prefieren Apache por su velocidad, seguridad, confiabilidad, robustez y facilidad de personalización. Además, Apache es capaz de satisfacer las necesidades de muchos entornos, ya que permite la instalación de varias extensiones y módulos. Esto es posible gracias a un conjunto de configuraciones que los desarrolladores y administradores de servidores pueden modificar para cumplir diferentes propósitos. En este tutorial, lo guiaremos a través de los archivos de configuración general y opciones que pueden afectar diferentes resultados en servidores Ubuntu y Debian.
Debian y Ubuntu se encuentran entre los sistemas operativos de servidor preferidos. Ambos tienen muchas similitudes. Por ejemplo, ambos utilizan el gestor de paquetes APT y paquetes DEB para la instalación manual. Manejan la configuración de Apache y la estructura de directorios de manera similar. Por lo tanto, debería poder seguir este tutorial con cualquiera de los sistemas operativos. Primero, puede seguir este tutorial para configurar un servidor Ubuntu en unos pocos pasos.
A continuación, inicie sesión como un usuario no root con privilegios sudo, ¡y comencemos!
Cómo instalar Apache en Ubuntu y Debian
Si su servidor aún no tiene Apache, puede instalarlo fácilmente con un solo comando. Primero, ejecute el comando de actualización:
|
1 |
sudo apt-get update |
Luego, puede instalar Apache ejecutando el siguiente comando:
|
1 |
sudo apt-get install apache2 |
Cuando se complete la instalación, puede verificar la versión instalada usando el comando:
|
1 |
apache2 -v |
Al momento de escribir este tutorial, la versión era:

Después de eso, visite la dirección IP o el nombre de dominio de su servidor. Debería poder ver la página de índice predeterminada de Apache:

La jerarquía de archivos de Apache en las distribuciones Ubuntu y Debian
Tanto las distribuciones de Ubuntu como las de Debian utilizan el gestor de paquetes apt. De manera similar, cuando instala un paquete, este crea jerarquías de archivos similares. En nuestro caso, tanto para Ubuntu como para Debian, Apache mantiene sus archivos de configuración dentro del directorio “/etc/apache2”. Ingrese al directorio usando el siguiente comando y enumere el contenido del directorio:
|
1 2 |
cd /etc/apache2 ls -F |
Puede ver la salida del comando en la captura de pantalla a continuación:

Puede ver una serie de archivos y subdirectorios con los que debería estar familiarizado al configurar un servidor Apache. Aquí está su descripción:
- apache2.conf – Es el archivo de configuración principal para un servidor Apache. Además, contiene todas las configuraciones predeterminadas. Aunque casi todas las configuraciones se pueden realizar desde este archivo, siempre se recomienda utilizar archivos designados separados para mayor simplicidad y para proteger este archivo predeterminado de posibles daños.
- conf-available – Es el directorio que contiene archivos de configuración local adicionales y archivos de otras aplicaciones que aún no están asociados con ningún módulo. Las configuraciones en este directorio no están activas a menos que las habilite. El comando a2enconf puede habilitar un archivo de configuración. Aquí está el contenido de este directorio:

- conf-enabled – Es el directorio que contiene configuraciones locales adicionales y archivos de configuración de otras aplicaciones asociadas con sus módulos correspondientes. Los archivos de configuración en este directorio están activos y afectan el comportamiento de Apache. Puede deshabilitar un archivo de configuración usando el comando a2disconf. Aquí está el contenido de este directorio:

- envvars – Es el archivo que contiene las variables de entorno de Apache2. Las variables en este archivo solo afectan a Apache y no están relacionadas con su sistema Linux. Aquí está el contenido del archivo:

- magic – Es el archivo que contiene instrucciones para determinar el tipo MIME de un archivo. Ayuda al servidor a determinar el tipo de un archivo.
- mods-available – Es el directorio que contiene los archivos de configuración para cargar módulos y configurarlos. Sin embargo, aún no están habilitados. Puede habilitarlos usando el comando a2enmod.
- mods-enabled – Es el directorio que contiene los archivos de configuración para cargar módulos y configurarlos. Las configuraciones en este directorio ya están habilitadas y enlazan a los módulos correspondientes. Puede deshabilitar los módulos con el comando a2dismod.
- ports-conf – Es el archivo que especifica los puertos disponibles para los hosts virtuales y los puertos TCP en los que Apache está escuchando.
- sites-available – Es el directorio que contiene los archivos de configuración disponibles para los hosts virtuales de Apache. Los hosts virtuales permiten que Apache sirva diferentes sitios web. Los archivos de este directorio aún no están activos. Puede habilitar un archivo de host virtual con el comando a2ensite.
- sites-enabled – Es el directorio que contiene los archivos de configuración de hosts virtuales activados. Generalmente contiene enlaces simbólicos a los archivos en el directorio sites-available. Puede deshabilitar un archivo de host virtual usando el comando a2dissite.
El diseño modular de los archivos de configuración de Apache le permite modificar y agregar archivos según lo necesite.
Contenido del archivo Apache2.conf
El archivo en “/etc/apache2/apache2.conf” contiene los archivos de configuración principales de Apache. Más específicamente, contiene las directivas de configuración que dan las instrucciones al servidor. Consta de tres secciones para definir las configuraciones de proceso del servidor global, la configuración del servidor predeterminado y las de los hosts virtuales .
En los sistemas Ubuntu y Debian, la mayor parte del archivo contiene las configuraciones de proceso del servidor global. Hacia la parte inferior puede encontrar las configuraciones para el servidor predeterminado y los hosts virtuales utilizando la directiva “Include”. Apache utiliza la directiva “Include” para leer otros archivos de configuración y luego incluirlos en el archivo de configuración actual, desde el punto donde aparece la directiva. Esto ocurre al iniciar el servidor Apache.
Al desplazarse hasta la parte inferior del archivo apache2.conf, debería ver varias directivas include. Las directivas cargan las definiciones de los módulos en el directorio mods-enabled, el archivo ports.conf, las configuraciones locales en el directorio conf-enabled y las configuraciones de los hosts virtuales en el directorio sites-enabled.
Sección de configuración del servidor global
La sección de configuración del servidor global contiene los ajustes e instrucciones que controlan cómo funciona Apache a nivel global. Presenta algunas directivas cuyos valores puede modificar para cambiar el comportamiento de Apache. Analicemos algunas de ellas:
- Timeout – Esta directiva especifica el tiempo máximo para que el servidor atienda una solicitud. Por defecto, es de 300 segundos, lo cual probablemente sea demasiado alto si está desarrollando una aplicación de respuesta más rápida. Puede cambiar esto a un valor menor si su servidor tiene suficientes recursos.
- KeepAlive – Especifica que cada conexión debe permanecer abierta para manejar múltiples solicitudes del mismo cliente. Por defecto, está configurado en “On”. Sin embargo, si está configurado en “Off”, cada solicitud tendrá que establecer una nueva conexión, incluso si proviene del mismo cliente. Esto puede causar una sobrecarga significativa en el servidor.
- MaxKeepAliveRequests – Controla el número máximo de solicitudes permitidas durante una sola conexión persistente antes de cerrarse. Para permitir un número ilimitado de conexiones, establezca el valor en 0. Para obtener el máximo rendimiento y eficiencia, establezca el número en el valor más alto posible.
- KeepAliveTimeout – Determina el número máximo de segundos a esperar por la siguiente solicitud del mismo cliente después de la última antes de que se cierre la conexión. El valor predeterminado es 5 segundos. Si el tiempo transcurre, en la siguiente solicitud se realizará una nueva conexión para manejarla.
- HostnameLookups – Decide si la búsqueda de DNS debe estar habilitada o no. Por defecto, está desactivada. Si la habilita, cada solicitud dará como resultado al menos una búsqueda en el servidor de nombres, lo que afectará muy negativamente al rendimiento de su servidor.
Archivo de host virtual predeterminado
Una instalación limpia del servidor Apache viene con un archivo de host virtual predeterminado llamado 000-default.conf. Este es el archivo que sirve la página index.html predeterminada de Apache. Se ubica en el directorio sites-available. El contenido de este archivo le dará una idea general del formato de los archivos de host virtual de Apache. Ingrese el siguiente comando para abrir el archivo:
|
1 |
sudo nano /etc/apache2/sites-available/000-default.conf |
Aquí está el contenido del archivo. Hemos eliminado los comentarios para mayor brevedad:
|
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
Como puede ver en el encabezado de configuración VirtualHost *:80, de forma predeterminada, este host virtual está configurado para manejar solicitudes en el puerto 80. Este es el puerto HTTP estándar.
Apache está diseñado para utilizar la definición de host virtual más específica que coincida con una solicitud en particular. Esto significa que este host virtual en particular no necesariamente manejará cada solicitud al servidor. Más bien, si hubiera otro archivo de host virtual con una definición más específica, este anularía este archivo.
Aquí están las descripciones de las directivas en el archivo de host virtual:
- ServerAdmin – Especifica el correo electrónico de contacto que se utilizará cuando haya problemas en el servidor. Apache generalmente muestra esto en su página de error generada. Si establece ServerSignature en “Email” en el archivo /etc/apache2/conf-enabled/security.conf, la dirección de correo electrónico especificada aquí se mostrará con un enlace mailto
- DocumentRoot – Esta directiva apunta al directorio que contiene los archivos del sitio web. Puede encontrar la página de índice de bienvenida predeterminada de Apache en el directorio /var/www/html en Ubuntu 20.04.
- ErrorLog – Esta directiva determina la ubicación del archivo de registro de errores.
- CustomLog – Esta directiva muestra la ubicación del registro de acceso y el formato de visualización del registro.
Directivas adicionales de host virtual
- ServerName – Especifica el nombre de dominio o la dirección IP que debe manejar el host virtual. Si estuviéramos definiendo múltiples hosts virtuales para que nuestro servidor Apache pueda servir múltiples sitios web, agregaríamos una directiva ServerName y especificaríamos el dominio que debe servir cada host virtual.
- ServerAlias – Esta directiva hace que un archivo de host virtual se aplique a más de un nombre, proporcionando dominios alternativos para llegar al mismo contenido. Por ejemplo, cuando sus usuarios tienen acceso al mismo contenido si anteponen a su nombre de dominio www. Por ejemplo, podríamos agregar lo siguiente al host virtual para el dominio example.com :
|
1 2 |
ServerName example.com ServerAlias www.example.com |
La directiva de definición de directorio
En casos del mundo real, es probable que tenga los archivos de su sitio web en varios directorios. El archivo de host virtual predeterminado no tiene la directiva Directory porque solo puede servir un archivo index.html. La directiva Directory especifica cómo maneja Apache los diferentes directorios dentro de la raíz de documentos del sitio web. Es en esta directiva donde también se definen las restricciones de acceso al sistema de archivos. De forma predeterminada, Apache solo permite el acceso a Internet a los archivos en el directorio /var/www. En este directorio, puede crear otros directorios que contendrán los archivos de su sitio web. Además, puede especificar cómo desea que se acceda a los archivos del directorio. Una definición de ejemplo puede verse así:
|
1 2 3 4 5 |
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Require all granted AllowOverride all </Directory> |
La directiva <Directory /var/www/html> especifica el directorio al que se aplicarán estas reglas. El “AllowOverride” especifica si un archivo “.htaccess” debe anular la configuración si lo coloca en el directorio especificado. Esto es necesario cuando se trabaja con frameworks como Laravel que funcionan con .htaccess y reescritura de URL.
Para obtener más información sobre los hosts virtuales, puede visitar nuestro tutorial sobre cómo configurar hosts virtuales de Apache en Ubuntu 20.04. Aquí hay un archivo de host virtual de ejemplo con todas las directivas que hemos definido:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@localhost.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Require all granted AllowOverride all </Directory> </VirtualHost> |
Directivas Redirect, Alias y ScriptAlias
En algunos casos, es posible que desee acceder a archivos o ejecutables del sitio web que no se encuentran directamente en el directorio DocumentRoot. Aquí es donde estas tres directivas entran en juego.
La Redirect directiva indica a los clientes que realicen una nueva solicitud con una URL diferente. Por lo general, la utilizará cuando desee dirigir a los visitantes de su sitio web a un nombre de dominio o dirección IP diferente. Tenga en cuenta que Redirect se ejecuta primero antes de Alias y ScriptAlias. La directiva Alias asigna una URL a una ruta de directorio. La directiva ScriptAlias asigna una URL a los directorios que contendrán scripts ejecutables. Para que Alias y ScriptAlias funcionen, debe establecer los permisos del directorio para el usuario www-data que utiliza la web.
Cómo habilitar sitios y módulos en Apache
Los hosts virtuales y los módulos deben habilitarse antes de que se activen y sean accesibles para el proceso de Apache. Además, los hosts virtuales se crean dentro del directorio sites-available como se explicó. Si tiene un archivo de host virtual con el nombre example.com.conf, puede habilitarlo usando el siguiente comando:
|
1 |
sudo a2ensite example.com.conf |
El comando habilita el host virtual. Sin embargo, para que los cambios surtan efecto, debe indicar a Apache que vuelva a cargar los archivos de configuración ingresando el siguiente comando:
|
1 |
sudo service apache2 reload |
Es posible que desee deshabilitar un archivo de host virtual llamado example.com.conf para que Apache no lo use para atender solicitudes. Para hacer eso, ingrese el siguiente comando para deshabilitar un archivo:
|
1 |
sudo a2dissite example.com.conf |
Nuevamente, para que los cambios surtan efecto de inmediato, debe indicar a Apache que vuelva a cargar los archivos de configuración ingresando el siguiente comando:
|
1 |
sudo service apache2 reload |
De manera similar, puede habilitar y deshabilitar módulos usando la misma sintaxis. El comando para habilitar un módulo es “a2enmod” y el comando para deshabilitar un módulo es “a2dismod.” Por ejemplo, hay un módulo de Apache llamado mod_rewrite que ayuda a reescribir URL según las configuraciones de .htaccess. Debe habilitar este módulo para que funcione el archivo .htaccess. Puede hacerlo ingresando el comando:
|
1 |
sudo a2enmod rewrite |
Para que este cambio surta efecto, debe volver a cargar las configuraciones de Apache. También puede deshabilitar el módulo ingresando el comando:
|
1 |
sudo a2dismod rewrite |
Después de eso, vuelva a cargar las configuraciones de Apache2 para que los cambios surtan efecto de inmediato.
Finalmente, aquí hay algunos recursos más que le ayudarán a familiarizarse con el servidor web Apache:
- Instalación del servidor Apache en Ubuntu 18.04: una guía práctica
- Cómo instalar el stack Linux, Apache, MySQL, PHP (LAMP) en CentOS 7
- Cómo asegurar Apache con Let’s Encrypt en Ubuntu 18.04
- El mundo de los servidores web: Apache vs. Nginx
Conclusión
En este tutorial, definimos los archivos de configuración básicos de Apache en sistemas Ubuntu y Debian. Como demostramos, Apache es altamente modular, lo que significa que puede instalar muchos módulos para realizar diferentes tareas.
Puede habilitar y deshabilitar fácilmente estos módulos y cambiar otras configuraciones para lograr diferentes resultados. Ahora puede modificar los archivos de configuración locales que luego se incluyen en el archivo de configuración principal. Por lo tanto, no tiene que preocuparse por corromper el archivo de configuración global.
¡Feliz computación!
Comentarios
Aún no hay comentarios. Sea el primero.