Introducción
Apache es uno de los servidores web más populares en internet. Se utiliza para servir más de la mitad de todos los sitios web activos. Aunque existen muchos servidores web viables que pueden servir su contenido, es útil entender cómo funciona Apache debido a su ubicuidad.
Este artículo examinará algunos archivos de configuración generales y las opciones que se pueden controlar dentro de ellos. Este artículo seguirá el diseño de archivos de Apache para Ubuntu/Debian, que es diferente de cómo otras distribuciones construyen la jerarquía de configuración.
Prerrequisitos
Si está utilizando Ubuntu versión 16.04 o inferior, le recomendamos que actualice a una versión más reciente, ya que Ubuntu ya no proporciona soporte para estas versiones. Esta colección de guías le ayudará a actualizar su versión de Ubuntu.
-
Un servidor que ejecute Ubuntu, junto con un usuario no root con privilegios de
sudo
y un cortafuegos activo. Para obtener orientación sobre cómo configurar estos elementos, elija su distribución de esta lista y siga nuestra Guía de Configuración Inicial del Servidor. -
Antes de comenzar a explorar tus configuraciones de Apache, debes tener Apache instalado en tu servidor. Puedes aprender cómo hacerlo siguiendo nuestro tutorial “Cómo instalar el servidor web Apache en Ubuntu” 22.04 / 20.04 / 18.04 o el tutorial Cómo instalar el servidor web Apache en Debian 10.
5 Pasos para Configurar el Servidor Web Apache en Ubuntu
- La Jerarquía de Archivos de Apache
- Explorando el Archivo Apache2.conf
- Configuraciones Globales de Apache
- Configurar el Archivo de Host Virtual de Apache
- Habilitar Sitios y Módulos
Paso 1: La Jerarquía de Archivos de Apache
Apache guarda sus archivos de configuración principales dentro de la carpeta /etc/apache2
. Al ejecutar el siguiente comando se listarán todos los archivos dentro de esta carpeta:
Outputenvars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available
Hay varios archivos de texto plano y algunos subdirectorios dentro de este directorio. Aquí hay algunas ubicaciones útiles con las que debes estar familiarizado:
apache2.conf
: Este es el archivo de configuración principal del servidor. Casi toda la configuración se puede hacer desde este archivo, aunque se recomienda usar archivos separados y designados para mayor simplicidad. Este archivo configurará los valores predeterminados y será el punto central de acceso para que el servidor lea los detalles de configuración.ports.conf
: Este archivo se utiliza para especificar los puertos en los que los hosts virtuales deben escuchar. Asegúrate de verificar que este archivo sea correcto si estás configurando SSL.sites-available/
ysites-enabled/
: El directoriosites-available
contiene configuraciones de archivos de host virtual. Las configuraciones dentro de esta carpeta establecerán qué contenido se sirve para qué solicitudes. Esto se habilita mediante enlaces al directoriosites-enabled
, que almacena archivos de configuración de host virtual activados. Cuando Apache se inicia o se recarga, lee los archivos de configuración y enlaces desde dentro del directoriosites-enabled
mientras compila una configuración completa.conf-available/
yconf-enabled/
: Estos directorios albergan fragmentos de configuración que no están vinculados a los archivos de configuración del host virtual.mods-enabled/
ymods-available/
: Estos directorios definen módulos que pueden cargarse opcionalmente. Los directorios contienen dos componentes: archivos que terminan en.load
, que contienen fragmentos que cargan módulos específicos, y archivos que terminan en.conf
, que almacenan las configuraciones de estos módulos.
La configuración de Apache no se realiza en un único archivo monolítico, sino que ocurre a través de un diseño modular donde se pueden agregar y modificar nuevos archivos según sea necesario.
Paso 2: Explorando el Archivo Apache2.conf
Los detalles de configuración principales para tu servidor Apache se encuentran en el archivo /etc/apache2/apache2.conf
.
Este archivo se divide en tres secciones principales:
- Configuración para el proceso global del servidor Apache
- Configuración para el servidor predeterminado
- Configuración de hosts virtuales.
Abre este archivo con tu editor de texto preferido. El siguiente ejemplo utiliza nano
:
En Ubuntu y Debian, este archivo se utiliza para configurar definiciones globales. La configuración del servidor predeterminado y de los hosts virtuales se manejan mediante el uso de la directiva Include
.
La directiva Include
permite que Apache lea otros archivos de configuración en el archivo actual en la ubicación en que aparece la declaración. El resultado es que Apache genera dinámicamente un archivo de configuración general al iniciar.
Dentro de este archivo se encuentran una serie de diferentes declaraciones Include
y IncludeOptional
. Estas directivas cargan definiciones de módulos, el documento ports.conf
, los archivos de configuración específicos en el directorio conf-enabled/
, y las definiciones de host virtual en el directorio sites-enabled/
:
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf
Paso 3: Configuraciones Globales de Apache
Existen algunas opciones que es posible que desees modificar en la Configuración Global:
Timeout
Por defecto, este parámetro está configurado en 300
. Esto significa que el servidor tiene un máximo de 300 segundos para cumplir cada solicitud. Este parámetro puede reducirse de manera segura a algo entre 30
y 60
segundos.
KeepAlive
Esta opción, si se establece en On
, permitirá que cada conexión permanezca abierta para manejar múltiples solicitudes del mismo cliente. Si se establece en Off
, cada solicitud tendrá que establecer una nueva conexión, lo que puede resultar en un gasto significativo dependiendo de su configuración y situación de tráfico.
MaxKeepAliveRequests
Esto controla cuántas solicitudes separadas manejará cada conexión antes de cerrarse. Mantener este número alto permitirá que Apache sirva contenido a cada cliente de manera más efectiva. La configuración predeterminada está establecida en 100
. Establecer este valor en 0
permitirá que Apache sirva una cantidad ilimitada de solicitudes para cada conexión.
KeepAliveTimeout
Esta configuración especifica cuánto tiempo esperar para la siguiente solicitud después de finalizar la última. Si se alcanza el umbral de tiempo de espera, entonces la conexión se cerrará. Esto significa que la próxima vez que se solicite contenido, el servidor establecerá una nueva conexión para manejar la solicitud del contenido que forma parte de la página que está visitando el cliente. El valor predeterminado está establecido en 5
.
Después de examinar el contenido de este archivo de configuración, puede cerrarlo presionando CTRL+X
.
Módulos de Procesamiento Múltiple
A Multi-Processing Module (MPM) extends Apache’s modular design. MPMs are responsible for listening, directing, and handling different network requests. You can cross-reference which section your Apache installation was compiled in with using the following command:
OutputCompiled in modules:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c
Puedes verificar el tipo de MPM en tu servidor con el comando a2query -M
:
Outputevent
La salida revela que se está utilizando el MPM event
en este servidor. Tu instalación puede tener varios para elegir, pero solo se puede seleccionar uno.
Paso 4: Actualizar el Archivo de Host Virtual de Apache
La declaración de host virtual predeterminada se encuentra en un archivo llamado 000-default.conf
dentro del directorio sites-available/
. Puedes aprender sobre el formato general de un archivo de host virtual examinando este archivo.
Abre el archivo con el siguiente comando:
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…
El host virtual predeterminado está configurado para manejar cualquier solicitud en el puerto 80
, el puerto HTTP estándar. Esto está definido en el encabezado de la declaración donde dice *:80
, lo que significa puerto 80
en cualquier interfaz.
Sin embargo, esto no significa necesariamente que manejará cada solicitud al servidor en este puerto. Apache utiliza la definición de host virtual más específica que coincida con la solicitud. Si hubiera una definición más específica, podría reemplazar esta definición. Después de examinar el archivo, puedes cerrarlo presionando CTRL+X
.
Configuración del Host Virtual de Apache
Las siguientes opciones se establecen dentro de la definición del host virtual fuera de cualquier otra subdeclaración de nivel inferior. Se aplican a todo el host virtual.
Para empezar, abre el archivo security.conf
dentro del directorio conf-available/
:
Este archivo contiene la directiva Server Signature
, que te permite especificar un correo electrónico de contacto que se debe utilizar cuando haya problemas con el servidor. Puedes cambiar la opción predeterminada de On
a EMail
para revelar la dirección de correo electrónico del administrador del servidor. Asegúrate de estar dispuesto a recibir el correo si ajustas esta configuración:
…
ServerSignature EMail
…
Sal del archivo presionando CTRL+X
. Después de editar un archivo de configuración, se te pedirá que confirmes tus cambios. Presiona Y
para guardar los cambios en tu archivo o presiona N
para descartarlos.
Dentro de tu archivo de host virtual, puedes agregar una directiva ServerName
que especifique el nombre de dominio o la dirección IP que este pedido debe manejar. Esta es la opción que agregaría especificidad al host virtual, permitiéndole anular la definición predeterminada si coincide con el valor de ServerName
.
Ejecuta el siguiente comando para abrir tu archivo de host virtual, asegurándote de reemplazar la variable your_domain
con tu nombre de dominio real:
Agregue your_domain
a la directiva ServerName
:
…
ServerName your_domain
…
De igual manera, también puede hacer que el host virtual se aplique a más de un nombre utilizando la directiva ServerAlias
. Esto proporciona rutas alternativas para acceder al mismo contenido. Un buen caso de uso para esto es agregar el mismo dominio, precedido por www
:
…
ServerAlias www.your_domain.com
…
La directiva DocumentRoot
especifica dónde se ubicará el contenido solicitado para este host virtual. En Ubuntu, el host virtual predeterminado está configurado para servir contenido desde el directorio /var/www/
:
…
DocumentRoot /var/www/your_domain/public_html
…
Definiciones de directorios
Dentro de la definición del host virtual, hay definiciones sobre cómo el servidor maneja diferentes directorios dentro del sistema de archivos. Apache aplicará todas estas direcciones en orden de menor a mayor, por lo que nuevamente hay una oportunidad para anular opciones anteriores.
Abra el archivo apache2.conf
con este comando:
…
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
…
La primera definición de directorio aplica reglas para el directorio /
, o raíz. Esto proporcionará la configuración base para su host virtual, ya que se aplica a todos los archivos servidos en el sistema de archivos. Observe las opciones de configuración de directorio, junto con algunos comentarios útiles, contenidos dentro de este archivo. Esta configuración predeterminada deniega el acceso a todo el contenido a menos que se especifique lo contrario en definiciones de directorio posteriores.
La directiva Require
puede restringir u abrir el acceso a diferentes recursos dentro de tu servidor.
La directiva AllowOverride
se utiliza para decidir si un archivo .htaccess
puede anular la configuración si se coloca en el directorio de contenido. Esto no está permitido por defecto, pero puede ser útil habilitarlo en diversas circunstancias.
Después de examinar el contenido de este archivo, puedes cerrarlo presionando CTRL+X
.
Declaraciones de Alias y ScriptAlias
Las definiciones de directorio a veces son precedidas por las directivas Alias
o ScriptAlias
.
Abre tu archivo de configuración de host virtual con este comando y reemplaza la variable your_domain
con tu nombre de dominio:
La directiva Alias
asigna una ruta de URL a una ruta de directorio. Por ejemplo, en un host virtual que maneja solicitudes a your_domain
, lo siguiente permitiría acceder al contenido dentro de /usr/local/apache/content/
al navegar a your_domain.com/content/
:
Alias “/content/” “/usr/local/apache/content/”
La directiva ScriptAlias
opera de la misma manera, pero se utiliza para definir directorios que tendrán componentes ejecutables en ellos:
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
Recuerda definir el directorio con privilegios de acceso como se discutió en la sección anterior. Después de completar tus ediciones en el archivo, sal del archivo presionando CTRL+X
. Si realizaste algún cambio en este archivo, presiona Y
para guardar los cambios en tu archivo o presiona N
para dejar el archivo como estaba antes de realizar cualquier cambio en la configuración.
Paso 5: Habilitar Sitios y Módulos
Una vez que tengas un archivo de host virtual que cumpla con tus requisitos, puedes utilizar las herramientas incluidas con Apache para convertirlo en sitios web en vivo.
Para crear un enlace simbólico en el directorio sites-enabled
a un archivo existente en el directorio sites-available
, emite el siguiente comando. Asegúrate de reemplazar tu_dominio
con el nombre de tu propio archivo de configuración de host virtual:
Después de habilitar un sitio, emite el siguiente comando para indicarle a Apache que recargue sus archivos de configuración, permitiendo que el cambio se propague:
También hay un comando complementario para deshabilitar un host virtual. Opera eliminando el enlace simbólico del directorio sites-enabled
. Por ejemplo, con tu sitio de host virtual habilitado, puedes deshabilitar el sitio predeterminado 000-default
:
Los módulos pueden activarse o desactivarse utilizando los comandos a2enmod
y a2dismod
respectivamente. Funcionan de la misma manera que las versiones a2ensite
y a2dissite
de estos comandos. Por ejemplo, para habilitar el módulo info
, puedes usar el siguiente comando:
De igual manera, puedes desactivar un módulo utilizando el comando a2dismod
:
Recuerda reiniciar Apache después de modificar archivos de configuración y habilitar o deshabilitar módulos.
Conclusión
Apache es versátil y muy modular, por lo que las necesidades de configuración serán diferentes según tu entorno.
Después de revisar algunos casos de uso general anteriores, deberías tener una buena comprensión de para qué se utilizan principalmente los archivos de configuración y cómo interactúan entre sí. Si necesitas conocer opciones de configuración específicas, los archivos proporcionados están bien comentados y Apache ofrece una excelente documentación. Con suerte, los archivos de configuración ya no serán tan intimidantes y te sentirás más cómodo experimentando y modificándolos según tus necesidades.