Cómo Configurar el Servidor Web Apache en un VPS Ubuntu o Debian

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

  1. La Jerarquía de Archivos de Apache
  2. Explorando el Archivo Apache2.conf
  3. Configuraciones Globales de Apache
  4. Configurar el Archivo de Host Virtual de Apache
  5. 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:

  1. ls -f /etc/apache2
Output
envars 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/ y sites-enabled/: El directorio sites-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 directorio sites-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 directorio sites-enabled mientras compila una configuración completa.
  • conf-available/ y conf-enabled/: Estos directorios albergan fragmentos de configuración que no están vinculados a los archivos de configuración del host virtual.
  • mods-enabled/ y mods-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:

  1. sudo nano /etc/apache2/apache2.conf

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/:

/etc/apache2/apache2.conf
…
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:

  1. apache2 -L
Output
Compiled 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:

  1. a2query -M
Output
event

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:

  1. sudo nano /etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default.conf
<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/:

  1. sudo nano /etc/apache2/conf-available/security.conf

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:

/etc/apache2/conf-available/security.conf
…
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:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Agregue your_domain a la directiva ServerName:

/etc/apache2/sites-available/your_domain.conf
…
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:

/etc/apache2/sites-available/your_domain.conf
…
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/:

/etc/apache2/sites-available/your_domain.conf
…
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:

  1. sudo nano /etc/apache2/apache2.conf
/etc/apache2/apache2.conf
…
<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:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

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/:

/etc/apache2/sites-available/your_domain.conf
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:

/etc/apache2/sites-available/your_domain.conf
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:

  1. sudo a2ensite your_domain

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:

  1. sudo systemctl restart apache2

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:

  1. sudo a2dissite 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:

  1. sudo a2enmod info

De igual manera, puedes desactivar un módulo utilizando el comando a2dismod:

  1. sudo a2dismod info

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.

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu-or-debian-vps