Arquitectura de configuración de Apache: archivos, directivas y módulos

Capítulo 3

Tiempo estimado de lectura: 8 minutos

+ Ejercicio

Mapa mental de la configuración: “qué archivo manda”

Apache se configura mediante archivos de texto con directivas (instrucciones) que se interpretan en un orden concreto. Para modificar configuración sin improvisar, conviene seguir siempre el mismo método: identificar el archivo principal, seguir los includes, ubicar el contexto donde aplica la directiva y validar sintaxis antes de recargar.

Archivos principales (según distribución)

  • Debian/Ubuntu: /etc/apache2/apache2.conf (principal) y /etc/apache2/ports.conf (puertos/Listen). Estructura típica con sites-available/sites-enabled y conf-available/conf-enabled.
  • RHEL/CentOS/Fedora: /etc/httpd/conf/httpd.conf (principal). Suelen usarse /etc/httpd/conf.d/*.conf y, en algunos casos, /etc/httpd/conf.modules.d/*.conf para módulos.

En ambos mundos el objetivo es el mismo: un archivo principal que incluye otros archivos para separar responsabilidades (puertos, módulos, vhosts, ajustes globales).

Directivas: qué son, dónde se pueden usar y cómo se aplican

Qué es una directiva

Una directiva es una línea (o bloque) que configura un comportamiento. Ejemplos: ServerName, Listen, DocumentRoot, DirectoryIndex, LoadModule.

Contextos: dónde “vive” una directiva

Las directivas no siempre se pueden poner en cualquier sitio. Apache valida el contexto:

  • Server config (configuración global): fuera de cualquier bloque. Afecta al servidor completo.
  • VirtualHost: dentro de <VirtualHost ...> ... </VirtualHost>. Afecta solo a ese host virtual.
  • Directory: dentro de <Directory /ruta> ... </Directory>. Afecta a un árbol de directorios concreto.
  • .htaccess (si está permitido): reglas por directorio, controladas por AllowOverride. (Aquí nos centramos en archivos de configuración del servidor, no en la operativa de .htaccess).

Precedencia: qué gana cuando hay conflicto

Regla práctica (simplificada) para no perderse:

Continúa en nuestra aplicación.
  • Escuche el audio con la pantalla apagada.
  • Obtenga un certificado al finalizar.
  • ¡Más de 5000 cursos para que explores!
O continúa leyendo más abajo...
Download App

Descargar la aplicación

  • Una directiva más específica suele prevalecer sobre una más general: VirtualHost sobre global; Directory sobre global para ese directorio.
  • Si la misma directiva se define varias veces en el mismo contexto, normalmente “gana” la última que Apache procesa (depende de la directiva, pero es una heurística útil).
  • El orden de carga importa: un include posterior puede sobrescribir valores anteriores.

Por eso es clave saber en qué archivo y en qué orden se está cargando cada bloque.

Orden de carga e includes: cómo seguir el rastro

Cómo se incluyen archivos

Apache usa directivas como Include y IncludeOptional para cargar otros archivos. Ejemplos típicos:

IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

Cuando ve un patrón (glob), carga los archivos en orden (normalmente alfabético). Esto explica por qué muchos archivos se nombran con prefijos (por ejemplo, 000-default.conf) para forzar el orden.

Diferencias de estructura por distribución

DistribuciónVhostsConfig adicionalMódulos
Debian/Ubuntu/etc/apache2/sites-available/ (definiciones) y /etc/apache2/sites-enabled/ (activas)/etc/apache2/conf-available/ y /etc/apache2/conf-enabled//etc/apache2/mods-available/ y /etc/apache2/mods-enabled/
RHEL/CentOS/FedoraA menudo en /etc/httpd/conf.d/ (por ejemplo vhost.conf)/etc/httpd/conf.d/*.conf/etc/httpd/conf.modules.d/*.conf o LoadModule en httpd.conf

Idea clave: en Debian/Ubuntu se “habilita” creando enlaces (o archivos) en carpetas *-enabled; en RHEL-like se suele trabajar directamente con archivos .conf dentro de conf.d y con includes desde el archivo principal.

Guía práctica: localizar un ajuste y modificarlo con seguridad

Paso 1: identificar el archivo principal y el comando de control

En Debian/Ubuntu, el comando habitual es apache2ctl (o apachectl), y el archivo principal suele ser /etc/apache2/apache2.conf. En RHEL-like, el archivo principal suele ser /etc/httpd/conf/httpd.conf.

Para evitar suposiciones, puedes pedirle a Apache que muestre su configuración compilada y rutas (si está disponible en tu sistema):

apachectl -V

Busca líneas como SERVER_CONFIG_FILE y HTTPD_ROOT.

Paso 2: buscar la directiva en todos los archivos

Antes de editar, localiza dónde se define realmente. Usa búsqueda recursiva:

# Debian/Ubuntu (ruta típica)\ngrep -R "^\s*ServerName\b" /etc/apache2/\ngrep -R "^\s*Listen\b" /etc/apache2/
# RHEL/CentOS/Fedora (ruta típica)\ngrep -R "^\s*ServerName\b" /etc/httpd/\ngrep -R "^\s*Listen\b" /etc/httpd/

Si aparece en varios sitios, anota el archivo y el contexto (global o dentro de <VirtualHost>).

Paso 3: editar en el lugar correcto (según el objetivo)

  • Si quieres un valor global (por ejemplo, evitar el warning de FQDN), edita el archivo global o un archivo en conf-available/conf.d.
  • Si quieres que aplique a un sitio concreto, edita el archivo del vhost correspondiente.

Evita duplicar la misma directiva en múltiples lugares “por si acaso”: crea confusión y hace difícil razonar sobre precedencia.

Ejercicio 1: localizar y ajustar ServerName

Objetivo

Definir ServerName para que Apache tenga un nombre canónico y evitar avisos típicos al validar configuración.

Pasos

  1. Localiza dónde está definido:

    grep -R "^\s*ServerName\b" /etc/apache2/ 2>/dev/null || true
    grep -R "^\s*ServerName\b" /etc/httpd/ 2>/dev/null || true
  2. Decide el alcance:

    • Global: define un nombre (FQDN o hostname) para el servidor.
    • Por sitio: define ServerName dentro del <VirtualHost> del sitio.
  3. Aplica un cambio global (ejemplo recomendado en Debian/Ubuntu usando un archivo dedicado):

    # Crear un archivo de configuración adicional\nsudo nano /etc/apache2/conf-available/servername.conf\n\n# Contenido\nServerName ejemplo.local

    Luego habilítalo:

    sudo a2enconf servername
  4. Alternativa RHEL-like: añade (o ajusta) en /etc/httpd/conf/httpd.conf o en un archivo dentro de /etc/httpd/conf.d/:

    ServerName ejemplo.local
  5. Valida sintaxis:

    apachectl configtest

    Debes ver Syntax OK. Si hay error, Apache indicará archivo y línea.

Nota didáctica: si defines ServerName global y también dentro de un vhost, el del vhost aplica a ese sitio; el global sirve como valor por defecto.

Ejercicio 2: revisar y entender Listen (puertos y direcciones)

Qué hace Listen

Listen indica en qué IP/puerto Apache aceptará conexiones. Ejemplos:

Listen 80
Listen 127.0.0.1:8080

Si hay varios Listen, Apache abrirá varios sockets. Un error común es duplicar el mismo Listen en dos archivos distintos, provocando fallo al iniciar por “Address already in use”.

Dónde suele estar

  • Debian/Ubuntu: frecuentemente en /etc/apache2/ports.conf.
  • RHEL-like: a menudo en /etc/httpd/conf/httpd.conf o en algún /etc/httpd/conf.d/*.conf.

Pasos

  1. Localiza todas las ocurrencias:

    grep -R "^\s*Listen\b" /etc/apache2/ 2>/dev/null || true
    grep -R "^\s*Listen\b" /etc/httpd/ 2>/dev/null || true
  2. Interpreta el resultado:

    • Listen 80 = todas las interfaces, puerto 80.
    • Listen 192.0.2.10:80 = solo esa IP.
  3. Haz un cambio controlado (ejemplo: añadir un puerto alternativo):

    # Añadir una línea adicional\nListen 8080
  4. Valida sintaxis:

    apachectl configtest

Gestión de módulos: habilitar, deshabilitar y verificar activos

Qué es un módulo

Un módulo añade capacidades a Apache (por ejemplo, TLS/SSL, reescritura de URLs, compresión, proxy). Algunos vienen integrados, otros se cargan dinámicamente. Si una directiva pertenece a un módulo no cargado, verás errores del tipo “Invalid command …”.

Cómo se cargan (idea general)

Muchos módulos se cargan con LoadModule:

LoadModule rewrite_module modules/mod_rewrite.so

En Debian/Ubuntu, esto suele estar gestionado por archivos en mods-available y enlaces en mods-enabled. En RHEL-like, suele estar en conf.modules.d o en el propio httpd.conf.

Debian/Ubuntu: habilitar/deshabilitar módulos

# Ver módulos habilitados (enlaces/archivos presentes)\nls -1 /etc/apache2/mods-enabled/\n\n# Habilitar un módulo\nsudo a2enmod rewrite\n\n# Deshabilitar un módulo\nsudo a2dismod rewrite

RHEL/CentOS/Fedora: habilitar/deshabilitar módulos

Normalmente se hace editando los archivos que contienen LoadModule (por ejemplo en /etc/httpd/conf.modules.d/) o instalando/desinstalando el paquete del módulo según el sistema. El enfoque seguro es: localizar el LoadModule, comentar/activar, y validar.

Verificar qué módulos están activos (en cualquier distribución)

apachectl -M

Esto lista módulos cargados. Úsalo para confirmar, por ejemplo, si rewrite_module o ssl_module están activos.

Pruebas de sintaxis y diagnóstico rápido

Validar configuración antes de recargar

Siempre que edites un archivo:

apachectl configtest

Si hay un error, Apache indicará el archivo y la línea. Corrige y repite hasta obtener Syntax OK.

Ejercicio 3: ciclo de trabajo seguro (edita → valida → aplica)

  1. Edita un único cambio (por ejemplo, añade ServerName o ajusta Listen).
  2. Ejecuta apachectl configtest.
  3. Si falla, vuelve al archivo y corrige; si pasa, entonces ya estás listo para aplicar el cambio con el mecanismo de tu sistema (recarga/reinicio), manteniendo el hábito de validar primero.

Ahora responde el ejercicio sobre el contenido:

Si una directiva aparece definida tanto de forma global como dentro de un bloque , ¿qué regla práctica describe mejor qué valor se aplica al sitio?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

En caso de conflicto, una directiva más específica suele ganar sobre una más general. Por eso, lo definido en VirtualHost aplica a ese host, y la configuración global actúa como valor por defecto.

Siguiente capítulo

Publicación de contenido web con Apache: DocumentRoot, permisos y tipos MIME

Arrow Right Icon
Portada de libro electrónico gratuitaApache desde Cero: Guía Práctica para Principiantes
30%

Apache desde Cero: Guía Práctica para Principiantes

Nuevo curso

10 páginas

Descarga la aplicación para obtener una certificación gratuita y escuchar cursos en segundo plano, incluso con la pantalla apagada.