8.1 Servidores Web en Linux: Nginx y Apache en Producción¶
Introducción¶
Los servidores web son uno de los componentes más críticos en cualquier infraestructura moderna. Son el punto de entrada para aplicaciones, APIs, paneles de administración y servicios públicos. En Linux, los dos servidores más utilizados son Nginx y Apache, cada uno con enfoques arquitectónicos distintos y casos de uso específicos.
Como Sysadmin senior, no basta con instalar un servidor web: debes configurarlo de forma segura, optimizada y preparada para producción, garantizando rendimiento, resiliencia y escalabilidad.
Objetivos de aprendizaje¶
Al finalizar este capítulo serás capaz de:
- Comprender las diferencias entre Nginx y Apache.
- Instalar y configurar un servidor web en Linux.
- Gestionar hosts virtuales (virtual hosts/server blocks).
- Servir contenido estático y aplicaciones backend.
- Configurar logs y diagnosticar problemas.
- Aplicar buenas prácticas de seguridad y rendimiento.
Conceptos Teóricos¶
1. Nginx vs Apache¶
Apache¶
- Basado en procesos/hilos.
- Alta compatibilidad.
- Uso tradicional en entornos legacy.
Nginx¶
- Basado en eventos (event-driven).
- Alto rendimiento bajo carga.
- Ideal como reverse proxy.
Recomendación actual
En entornos modernos, Nginx es preferido por su eficiencia y escalabilidad.
2. Arquitectura de Nginx¶
Nginx utiliza un modelo:
- Worker processes
- Event loop
Ventajas:
- bajo consumo de memoria
- alta concurrencia
- excelente manejo de conexiones simultáneas
3. Ciclo de una petición HTTP¶
- Cliente → petición HTTP
- Servidor web → interpreta ruta
- Respuesta:
- archivo estático
- proxy a backend (PHP, Node, etc.)
4. Virtual Hosts / Server Blocks¶
Permiten servir múltiples dominios desde un mismo servidor.
Ejemplo:
example.comapi.example.com
5. Ubicaciones de configuración¶
Nginx¶
Apache¶
Laboratorio Práctico¶
Escenario¶
Desplegar un servidor web con Nginx:
- servir contenido estático
- configurar dominio
- habilitar logs
- validar acceso
Parte 1: Instalación de Nginx¶
Paso 2: Verificar servicio¶
Paso 3: Acceso inicial¶
Output esperado:
Parte 2: Configurar un Virtual Host¶
Paso 1: Crear estructura web¶
Paso 2: Crear configuración¶
Contenido:
server {
listen 80;
server_name app.local;
root /var/www/app;
index index.html;
access_log /var/log/nginx/app_access.log;
error_log /var/log/nginx/app_error.log;
location / {
try_files $uri $uri/ =404;
}
}
Explicación clave¶
- server_name → dominio
- root → directorio web
- try_files → control de rutas
Paso 3: Activar sitio¶
Paso 4: Validar configuración¶
Paso 5: Reiniciar servicio¶
Paso 6: Test¶
Parte 3: Reverse Proxy (caso real)¶
Escenario: Aplicación en puerto 3000¶
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Parte 4: Apache básico (comparativa)¶
Instalación¶
Virtual Host¶
Activar¶
Errores Comunes y Troubleshooting¶
1. Error 403 Forbidden¶
Causa:
- permisos incorrectos.
Solución:
2. Error 404 Not Found¶
- ruta incorrecta
- archivo inexistente
3. nginx no arranca¶
Verifica errores de config.
4. Puerto ocupado¶
5. DNS no resuelve¶
Editar:
Buenas Prácticas (Nivel Senior)¶
1. Separación de sitios¶
- un config por aplicación
- modularidad
2. Logs dedicados¶
3. Seguridad básica¶
- desactivar directory listing
- ocultar versión del servidor
4. Uso de HTTPS¶
Implementar TLS (Let's Encrypt):
5. Reverse proxy para apps¶
- Node.js
- Python
- Go
6. Optimización¶
7. Rate limiting¶
8. Hardening¶
- firewall activo
- SELinux/AppArmor configurado
- no ejecutar como root
Resumen y Siguiente Paso¶
Has aprendido a instalar, configurar y operar servidores web en Linux con Nginx y Apache, incluyendo virtual hosts, reverse proxy y troubleshooting. Este conocimiento es esencial para desplegar servicios web robustos en producción.
El siguiente paso es abordar otro componente crítico de cualquier aplicación:
➡️ 8.2 Bases de Datos, donde aprenderás a desplegar, asegurar y optimizar sistemas como MySQL, PostgreSQL o MariaDB.