Instalación y arranque del servidor Apache

Capítulo 2

Tiempo estimado de lectura: 6 minutos

+ Ejercicio

Objetivo del capítulo

En este capítulo instalarás Apache con el gestor de paquetes de tu distribución, aprenderás a controlar el servicio con systemd (iniciar/detener/reiniciar/habilitar al arranque) y validarás que realmente está funcionando mediante comprobaciones prácticas (estado del servicio, prueba HTTP y verificación de puertos). También verás cómo diagnosticar fallos típicos de arranque usando los mensajes de error.

Identificar el nombre del paquete: apache2 vs httpd

El software es el mismo (Apache HTTP Server), pero el nombre del paquete cambia según la familia de la distribución:

DistribuciónPaqueteServicio (systemd)
Debian/Ubuntuapache2apache2
RHEL/CentOS/Rocky/Alma/Fedorahttpdhttpd

Si no estás seguro, puedes buscar el paquete:

# Debian/Ubuntu (APT)
apt-cache search apache2 | head

# RHEL/Fedora (DNF/YUM)
dnf search httpd | head

Instalación paso a paso con el gestor de paquetes

Opción A: Debian/Ubuntu (APT)

  1. Actualizar el índice de paquetes:

    sudo apt update
  2. Instalar Apache:

    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

    sudo apt install -y apache2
  3. Comprobar versión (opcional):

    apache2 -v

Opción B: RHEL/CentOS/Rocky/Alma/Fedora (DNF/YUM)

  1. Instalar Apache:

    # Fedora/RHEL 8+
    sudo dnf install -y httpd
    
    # Sistemas antiguos con yum
    sudo yum install -y httpd
  2. Comprobar versión (opcional):

    httpd -v

Control del servicio con systemd

Una vez instalado, Apache se gestiona como servicio. Usa el nombre correcto según tu sistema (apache2 o httpd).

Iniciar, detener y reiniciar

# Debian/Ubuntu
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2

# RHEL/Fedora
sudo systemctl start httpd
sudo systemctl stop httpd
sudo systemctl restart httpd

Recargar configuración sin cortar conexiones (reload)

Cuando cambias configuración, a menudo conviene recargar en lugar de reiniciar (si la configuración es válida):

# Debian/Ubuntu
sudo systemctl reload apache2

# RHEL/Fedora
sudo systemctl reload httpd

Habilitar al arranque (enable) y comprobarlo

# Debian/Ubuntu
sudo systemctl enable apache2
sudo systemctl is-enabled apache2

# RHEL/Fedora
sudo systemctl enable httpd
sudo systemctl is-enabled httpd

Validaciones prácticas: comprobar que Apache está funcionando

1) Estado del servicio

El primer chequeo es ver si el servicio está active (running) y si hay errores recientes.

# Debian/Ubuntu
systemctl status apache2 --no-pager

# RHEL/Fedora
systemctl status httpd --no-pager

Si está activo, verás algo similar a: Active: active (running). Si falla, verás failed y pistas del motivo.

2) Prueba HTTP con navegador o curl

Desde la misma máquina, prueba el servidor local:

curl -I http://localhost/

Deberías obtener un código 200 o, según la configuración por defecto, una respuesta válida (por ejemplo, HTTP/1.1 200 OK). También puedes abrir en un navegador: http://localhost/.

Si quieres probar desde otra máquina, usa la IP o el nombre DNS del servidor:

curl -I http://IP_DEL_SERVIDOR/

3) Verificar que los puertos 80/443 están en escucha

Apache debe estar escuchando en el puerto 80 (HTTP) y, si has configurado TLS, en 443 (HTTPS). Compruébalo con ss:

sudo ss -lntp | grep -E ':(80|443)\b'

Alternativa con lsof (si está instalado):

sudo lsof -iTCP:80 -sTCP:LISTEN
sudo lsof -iTCP:443 -sTCP:LISTEN

Si no aparece el puerto 80, el servicio puede no estar iniciado, puede estar fallando al arrancar o estar configurado para escuchar en otro puerto.

Diagnóstico de fallos comunes de arranque

Cuando Apache no inicia, el enfoque práctico es: (1) mirar el estado del servicio, (2) leer logs con journalctl, (3) validar configuración, (4) verificar puertos y permisos.

Ver mensajes de error del servicio (journalctl)

# Debian/Ubuntu
sudo journalctl -u apache2 -xe --no-pager | tail -n 80

# RHEL/Fedora
sudo journalctl -u httpd -xe --no-pager | tail -n 80

Busca líneas con AH (códigos de error de Apache) o mensajes como Address already in use, Syntax error, Permission denied.

Fallo 1: Puerto 80/443 ocupado (Address already in use)

Síntomas típicos: el servicio queda en failed y en los logs aparece (98)Address already in use o similar.

Pasos para resolver:

  1. Identificar qué proceso está usando el puerto:

    sudo ss -lntp | grep ':80\b'
    sudo ss -lntp | grep ':443\b'
  2. Si el puerto lo ocupa otro servidor web (por ejemplo, Nginx), decide si lo detienes o cambias el puerto de Apache:

    # Ejemplo: detener el servicio que ocupa el puerto (ajusta el nombre)
    sudo systemctl stop nginx
  3. Si necesitas cambiar el puerto de Apache, localiza las directivas Listen y ajusta (por ejemplo a 8080). Luego recarga/reinicia.

    # Tras el cambio
    sudo systemctl restart apache2  # o httpd

Fallo 2: Configuración inválida (Syntax error / Invalid command)

Síntomas: el servicio no arranca y los logs indican error de sintaxis, archivo incluido inexistente o directiva desconocida.

Validación recomendada antes de reiniciar:

# Debian/Ubuntu
sudo apache2ctl configtest

# RHEL/Fedora
sudo apachectl configtest
# o
sudo httpd -t

Resultados típicos:

  • Syntax OK: la sintaxis es correcta (si aun así falla, revisa puertos, módulos, permisos o SELinux).

  • Si muestra un archivo y línea, ve directamente a esa ruta y corrige la directiva indicada.

Tras corregir, reinicia o recarga:

sudo systemctl reload apache2  # o httpd

Fallo 3: Permisos (Permission denied) en archivos o directorios

Síntomas: Apache arranca pero no sirve contenido, o directamente falla si no puede leer archivos críticos. En logs puedes ver Permission denied al acceder a un directorio o archivo.

Checklist de acciones:

  • Verifica permisos y propietario del directorio del sitio y archivos (lectura para el usuario/grupo bajo el que corre Apache).

  • Revisa rutas configuradas en DocumentRoot y en bloques <Directory>.

Comandos útiles para inspección rápida:

# Ver permisos y propietario
ls -ld /ruta/al/documentroot
ls -l /ruta/al/documentroot | head

Si el problema es al arrancar por acceso a un archivo de configuración o certificado, el log suele indicar exactamente qué ruta no puede leer.

Fallo 4: El servicio está activo pero no responde por red

Si systemctl status muestra active (running) pero desde otra máquina no responde:

  • Confirma que escucha en la IP/puerto esperado: ss -lntp.

  • Prueba localmente: curl -I http://localhost/.

  • Si local funciona y remoto no, suele ser firewall o reglas de red. Verifica que el puerto 80/443 esté permitido en el firewall de tu sistema y en el perímetro (si aplica).

Flujo recomendado de verificación rápida (checklist)

  • 1) systemctl status apache2|httpd

  • 2) journalctl -u apache2|httpd -xe

  • 3) apache2ctl configtest o httpd -t

  • 4) ss -lntp | grep -E ':(80|443)\b'

  • 5) curl -I http://localhost/ y luego prueba desde otra máquina

Ahora responde el ejercicio sobre el contenido:

Si Apache no inicia y en los logs aparece el mensaje "Address already in use", ¿cuál es el procedimiento más adecuado para resolverlo?

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

¡Tú error! Inténtalo de nuevo.

"Address already in use" indica que el puerto 80/443 está ocupado. Lo adecuado es detectar el proceso que escucha en ese puerto, liberar el puerto deteniendo el servicio conflictivo o ajustar Listen a otro puerto y luego reiniciar/recargar Apache.

Siguiente capítulo

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

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

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.