Harper
PLAN DE FORMACIÓN Departamento de Infraestructura
v10 · 2026
C2 · Virtualización

Módulo 5 — Servidores web

Este módulo cubre la instalación y gestión de los servicios web más utilizados en el departamento: Apache y Nginx como servidores web, Nginx Proxy Manager (NPM) como proxy reverso con interfaz gráfica, y Certbot para la gestión de certificados SSL gratuitos con Let's Encrypt.

Tipo: Práctico + Lab Prerrequisito: M3 + M4 (VMs Ubuntu sobre Proxmox) Duración estimada: 10–14 horas
📚 Antes de empezar — Conceptos clave del módulo

Si algún término del módulo no te suena, aquí tienes el contexto rápido para arrancar sin perderte. Estos son los conceptos clave que vas a ver más adelante.

Servidor web
Programa que recibe peticiones HTTP/HTTPS de los navegadores y devuelve páginas, imágenes o datos. Apache y Nginx son los más conocidos.
Apache
Servidor web tradicional, muy maduro y modular. Configura sitios mediante "virtual hosts".
Nginx
Servidor web moderno, muy rápido y eficiente. Configura sitios mediante "server blocks". También sirve como proxy reverso.
Virtual host / Server block
Configuración que le dice al servidor web cómo responder según el dominio que el navegador pida.
Proxy reverso
Servidor intermedio que recibe peticiones de internet y las reenvía al servicio interno correcto. Permite exponer varios servicios bajo un mismo dominio o IP.
Docker
Plataforma para correr aplicaciones en contenedores aislados. Aquí lo usamos para desplegar Nginx Proxy Manager.
Certificado SSL
Archivo digital que valida la identidad de tu sitio y cifra las comunicaciones (esto es lo que activa el candado HTTPS en el navegador).
Let's Encrypt
Autoridad certificadora que emite certificados SSL gratuitos. Certbot los obtiene y renueva automáticamente cada 90 días.

Para la lista completa de términos del plan, abre el glosario en la barra lateral.

5.1 Objetivos del módulo

  • Instalar y configurar Apache como servidor web básico.
  • Instalar y configurar Nginx como servidor web y proxy reverso.
  • Desplegar Nginx Proxy Manager con Docker para proxy reverso con GUI.
  • Emitir y gestionar certificados SSL gratuitos con Let's Encrypt / Certbot.
  • Configurar virtual hosts y server blocks para múltiples sitios.
  • Entender el flujo de tráfico en un proxy reverso.

5.2 Apache — servidor web

5.2.1 Instalación y primeros pasos

apt update && apt install apache2 -y
systemctl enable apache2
systemctl start apache2
# Verificar en navegador: http://ip_del_servidor

5.2.2 Estructura de directorios de Apache

Directorio / ArchivoFunción
/etc/apache2/apache2.confConfiguración principal de Apache.
/etc/apache2/sites-available/Virtual hosts disponibles (configurados pero no activos).
/etc/apache2/sites-enabled/Virtual hosts activos (symlinks a sites-available).
/etc/apache2/mods-available/Módulos disponibles para cargar.
/var/www/html/Directorio raíz del sitio web por defecto.
/var/log/apache2/Logs de acceso y error.

5.2.3 Virtual Hosts en Apache

# Crear directorio para el sitio
mkdir -p /var/www/mi-sitio/public_html
echo '<h1>Sitio de prueba</h1>' > /var/www/mi-sitio/public_html/index.html

# Crear virtual host
nano /etc/apache2/sites-available/mi-sitio.conf

<VirtualHost *:80>
    ServerName mi-sitio.local
    ServerAlias www.mi-sitio.local
    DocumentRoot /var/www/mi-sitio/public_html
    ErrorLog ${APACHE_LOG_DIR}/mi-sitio-error.log
    CustomLog ${APACHE_LOG_DIR}/mi-sitio-access.log combined
</VirtualHost>

# Habilitar el sitio y recargar Apache
a2ensite mi-sitio.conf
systemctl reload apache2

5.2.4 Módulos útiles de Apache

MóduloFunciónHabilitar con
mod_rewriteReescritura de URLs. Necesario para muchos CMS.a2enmod rewrite
mod_sslSoporte SSL/TLS nativo en Apache.a2enmod ssl
mod_headersGestión de cabeceras HTTP.a2enmod headers
mod_proxyProxy HTTP básico.a2enmod proxy proxy_http

5.3 Nginx — servidor web y proxy reverso

5.3.1 Instalación

apt update && apt install nginx -y
systemctl enable nginx
systemctl start nginx
# Verificar en navegador: http://ip_del_servidor

5.3.2 Estructura de Nginx

Directorio / ArchivoFunción
/etc/nginx/nginx.confConfiguración principal de Nginx.
/etc/nginx/sites-available/Server blocks disponibles (no activos).
/etc/nginx/sites-enabled/Server blocks activos (symlinks).
/var/www/html/Directorio raíz por defecto.
/var/log/nginx/Logs de acceso y error.

5.3.3 Server Block en Nginx

nano /etc/nginx/sites-available/mi-sitio

server {
    listen 80;
    server_name mi-sitio.local www.mi-sitio.local;
    root /var/www/mi-sitio;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

# Habilitar y verificar configuración
ln -s /etc/nginx/sites-available/mi-sitio /etc/nginx/sites-enabled/
nginx -t                  # Test de configuración
systemctl reload nginx

5.3.4 Nginx como proxy reverso

El proxy reverso recibe peticiones externas y las redirige a servicios internos. Útil para exponer múltiples servicios bajo un mismo IP/puerto:

server {
    listen 80;
    server_name app.mi-dominio.com;

    location / {
        proxy_pass http://127.0.0.1:3000;   # Servicio interno
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

5.4 Nginx Proxy Manager (NPM) — proxy reverso con interfaz gráfica

Nginx Proxy Manager es una solución que provee una interfaz web amigable para gestionar proxy reverso, SSL y redirecciones sin necesidad de editar archivos de configuración de Nginx manualmente. Se despliega con Docker.

5.4.1 Instalación de Docker

# Instalar dependencias
apt install -y ca-certificates curl gnupg lsb-release

# Agregar repositorio oficial de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
  | tee /etc/apt/sources.list.d/docker.list

apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker

5.4.2 Despliegue de Nginx Proxy Manager

mkdir -p /opt/npm && cd /opt/npm
nano docker-compose.yml
version: '3.8'

services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'              # Puerto de la interfaz web admin
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
docker compose up -d
# Acceder a la GUI: http://ip_del_servidor:81
# Credenciales por defecto: admin@example.com / changeme

5.4.3 Configurar un Proxy Host en NPM

  1. Iniciar sesión en la GUI (http://ip:81) y cambiar las credenciales por defecto.
  2. Ir a Proxy Hosts → Add Proxy Host.
  3. Ingresar el Domain Name (ej: app.mi-dominio.com).
  4. En Forward Hostname / IP, ingresar la IP del servicio interno.
  5. En Forward Port, ingresar el puerto del servicio.
  6. En la pestaña SSL, seleccionar "Request a new SSL Certificate" (requiere dominio real).
  7. Habilitar Force SSL y HTTP/2 Support.
  8. Guardar — NPM gestiona automáticamente el certificado y la renovación.

5.5 Certbot — certificados SSL gratuitos con Let's Encrypt

Certbot es la herramienta oficial para obtener y renovar certificados SSL de Let's Encrypt. Se usa cuando no se tiene NPM o cuando se necesita integrar SSL directamente en Apache o Nginx.

âš  Requisito

Let's Encrypt requiere un dominio público real y que el puerto 80 esté accesible desde internet para la verificación del dominio. No funciona con IPs privadas o dominios .local.

5.5.1 Instalación y uso con Nginx

apt install certbot python3-certbot-nginx -y

# Obtener certificado para un dominio
certbot --nginx -d mi-dominio.com -d www.mi-dominio.com

# Certbot modifica automáticamente el server block de Nginx
# para incluir SSL y redirección HTTP → HTTPS

# Verificar renovación automática (se configura solo)
systemctl status certbot.timer

# Renovación manual (si es necesario)
certbot renew

5.5.2 Instalación y uso con Apache

apt install certbot python3-certbot-apache -y
certbot --apache -d mi-dominio.com

5.6 Laboratorio práctico

Este laboratorio se realiza en VMs de Ubuntu Server desplegadas en el lab de Proxmox (Módulo 4).

  1. Crear 2 VMs Ubuntu Server en Proxmox: VM1 para Apache + Nginx, VM2 para NPM.
  2. En VM1: instalar Apache y configurar un virtual host funcional que responda en un nombre DNS de lab.
  3. En VM1: instalar Nginx y configurar un server block básico.
  4. En VM1: configurar Nginx como proxy reverso hacia un servicio Python simple (http.server).
  5. En VM2: instalar Docker y desplegar Nginx Proxy Manager.
  6. En VM2: configurar al menos 2 proxy hosts que apunten a servicios en VM1.
  7. Si se dispone de dominio real: obtener certificado SSL con Certbot en al menos 1 servicio.
  8. Documentar la arquitectura de red del lab: qué servicio está en qué VM y qué puerto.

Plantilla de arquitectura del lab

ComponenteVM / HostIPPuertoNotas
Apache (sitio principal)
Nginx (servidor web)
Nginx (proxy reverso)
Servicio interno (http.server)
NPM — GUI admin
NPM — Proxy host 1
NPM — Proxy host 2
Dominio público (si aplica)
Certificado SSL emitido

5.7 Checklist de evaluación

  • Instaló Apache y configuró al menos 1 virtual host funcional.
  • Instaló Nginx y configuró al menos 1 server block.
  • Configuró Nginx como proxy reverso hacia al menos 1 servicio.
  • Instaló Docker y desplegó Nginx Proxy Manager correctamente.
  • Configuró al menos 2 proxy hosts en NPM.
  • Puede agregar y gestionar proxy hosts desde la GUI de NPM sin ayuda.
  • Entiende el flujo de tráfico en un proxy reverso (cliente → NPM → servicio interno).
  • Conoce el proceso de emisión de certificados SSL con Let's Encrypt / Certbot.

5.8 Referencia rápida — Cheatsheet servidores web

AcciónComando
Ver estado Apachesystemctl status apache2
Habilitar virtual hosta2ensite nombre.conf && systemctl reload apache2
Habilitar módulo Apachea2enmod nombre && systemctl reload apache2
Test configuración Apacheapache2ctl configtest
Ver estado Nginxsystemctl status nginx
Test configuración Nginxnginx -t
Recargar Nginxsystemctl reload nginx
Habilitar server block Nginxln -s /etc/nginx/sites-available/x /etc/nginx/sites-enabled/
Ver contenedores Dockerdocker ps
Ver logs NPMdocker compose logs -f (desde /opt/npm)
Reiniciar NPMdocker compose restart (desde /opt/npm)
Renovar certificados Certbotcertbot renew
Ver logs Apachetail -f /var/log/apache2/error.log
Ver logs Nginxtail -f /var/log/nginx/error.log