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 / Archivo | Función |
|---|---|
/etc/apache2/apache2.conf | Configuració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ódulo | Función | Habilitar con |
|---|---|---|
mod_rewrite | Reescritura de URLs. Necesario para muchos CMS. | a2enmod rewrite |
mod_ssl | Soporte SSL/TLS nativo en Apache. | a2enmod ssl |
mod_headers | Gestión de cabeceras HTTP. | a2enmod headers |
mod_proxy | Proxy 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 / Archivo | Función |
|---|---|
/etc/nginx/nginx.conf | Configuració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
- Iniciar sesión en la GUI (
http://ip:81) y cambiar las credenciales por defecto. - Ir a Proxy Hosts → Add Proxy Host.
- Ingresar el Domain Name (ej:
app.mi-dominio.com). - En Forward Hostname / IP, ingresar la IP del servicio interno.
- En Forward Port, ingresar el puerto del servicio.
- En la pestaña SSL, seleccionar "Request a new SSL Certificate" (requiere dominio real).
- Habilitar Force SSL y HTTP/2 Support.
- 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.
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).
- Crear 2 VMs Ubuntu Server en Proxmox: VM1 para Apache + Nginx, VM2 para NPM.
- En VM1: instalar Apache y configurar un virtual host funcional que responda en un nombre DNS de lab.
- En VM1: instalar Nginx y configurar un server block básico.
- En VM1: configurar Nginx como proxy reverso hacia un servicio Python simple (
http.server). - En VM2: instalar Docker y desplegar Nginx Proxy Manager.
- En VM2: configurar al menos 2 proxy hosts que apunten a servicios en VM1.
- Si se dispone de dominio real: obtener certificado SSL con Certbot en al menos 1 servicio.
- Documentar la arquitectura de red del lab: qué servicio está en qué VM y qué puerto.
Plantilla de arquitectura del lab
| Componente | VM / Host | IP | Puerto | Notas |
|---|---|---|---|---|
| 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ón | Comando |
|---|---|
| Ver estado Apache | systemctl status apache2 |
| Habilitar virtual host | a2ensite nombre.conf && systemctl reload apache2 |
| Habilitar módulo Apache | a2enmod nombre && systemctl reload apache2 |
| Test configuración Apache | apache2ctl configtest |
| Ver estado Nginx | systemctl status nginx |
| Test configuración Nginx | nginx -t |
| Recargar Nginx | systemctl reload nginx |
| Habilitar server block Nginx | ln -s /etc/nginx/sites-available/x /etc/nginx/sites-enabled/ |
| Ver contenedores Docker | docker ps |
| Ver logs NPM | docker compose logs -f (desde /opt/npm) |
| Reiniciar NPM | docker compose restart (desde /opt/npm) |
| Renovar certificados Certbot | certbot renew |
| Ver logs Apache | tail -f /var/log/apache2/error.log |
| Ver logs Nginx | tail -f /var/log/nginx/error.log |