Web
This content is not available in your language yet.
8.1 Servidores Web en Linux: Nginx y Apache en Producción
Sección titulada «8.1 Servidores Web en Linux: Nginx y Apache en Producción»Introducción
Sección titulada «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
Sección titulada «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
Sección titulada «Conceptos Teóricos»1. Nginx vs Apache
Sección titulada «1. Nginx vs Apache»- Basado en procesos/hilos.
- Alta compatibilidad.
- Uso tradicional en entornos legacy.
- Basado en eventos (event-driven).
- Alto rendimiento bajo carga.
- Ideal como reverse proxy.
En entornos modernos, Nginx es preferido por su eficiencia y escalabilidad.
2. Arquitectura de Nginx
Sección titulada «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
Sección titulada «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
Sección titulada «4. Virtual Hosts / Server Blocks»Permiten servir múltiples dominios desde un mismo servidor.
Ejemplo:
example.comapi.example.com
5. Ubicaciones de configuración
Sección titulada «5. Ubicaciones de configuración»/etc/nginx/nginx.conf/etc/nginx/sites-available//etc/nginx/sites-enabled//etc/apache2/apache2.conf/etc/apache2/sites-available/Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Desplegar un servidor web con Nginx:
- servir contenido estático
- configurar dominio
- habilitar logs
- validar acceso
Parte 1: Instalación de Nginx
Sección titulada «Parte 1: Instalación de Nginx»sudo apt updatesudo apt install nginxPaso 2: Verificar servicio
Sección titulada «Paso 2: Verificar servicio»systemctl status nginxPaso 3: Acceso inicial
Sección titulada «Paso 3: Acceso inicial»curl http://localhostOutput esperado:
<html>Welcome to nginx!</html>Parte 2: Configurar un Virtual Host
Sección titulada «Parte 2: Configurar un Virtual Host»Paso 1: Crear estructura web
Sección titulada «Paso 1: Crear estructura web»sudo mkdir -p /var/www/appecho "Hola mundo" | sudo tee /var/www/app/index.htmlPaso 2: Crear configuración
Sección titulada «Paso 2: Crear configuración»sudo nano /etc/nginx/sites-available/appContenido:
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
Sección titulada «Explicación clave»- server_name → dominio
- root → directorio web
- try_files → control de rutas
Paso 3: Activar sitio
Sección titulada «Paso 3: Activar sitio»sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/Paso 4: Validar configuración
Sección titulada «Paso 4: Validar configuración»sudo nginx -tPaso 5: Reiniciar servicio
Sección titulada «Paso 5: Reiniciar servicio»sudo systemctl reload nginxPaso 6: Test
Sección titulada «Paso 6: Test»curl http://app.localParte 3: Reverse Proxy (caso real)
Sección titulada «Parte 3: Reverse Proxy (caso real)»Escenario: Aplicación en puerto 3000
Sección titulada «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)
Sección titulada «Parte 4: Apache básico (comparativa)»Instalación
Sección titulada «Instalación»sudo apt install apache2Virtual Host
Sección titulada «Virtual Host»sudo nano /etc/apache2/sites-available/app.conf<VirtualHost *:80> ServerName app.local DocumentRoot /var/www/app</VirtualHost>Activar
Sección titulada «Activar»sudo a2ensite appsudo systemctl reload apache2Errores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. Error 403 Forbidden
Sección titulada «1. Error 403 Forbidden»-Causa:*
- permisos incorrectos.
Solución:
chmod -R 755 /var/www/app2. Error 404 Not Found
Sección titulada «2. Error 404 Not Found»- ruta incorrecta
- archivo inexistente
3. nginx no arranca
Sección titulada «3. nginx no arranca»nginx -tVerifica errores de config.
4. Puerto ocupado
Sección titulada «4. Puerto ocupado»ss -tulnp | grep :805. DNS no resuelve
Sección titulada «5. DNS no resuelve»Editar:
/etc/hosts127.0.0.1 app.localBuenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Separación de sitios
Sección titulada «1. Separación de sitios»- un config por aplicación
- modularidad
2. Logs dedicados
Sección titulada «2. Logs dedicados»access_log /var/log/nginx/app.log;3. Seguridad básica
Sección titulada «3. Seguridad básica»- desactivar directory listing
- ocultar versión del servidor
server_tokens off;4. Uso de HTTPS
Sección titulada «4. Uso de HTTPS»Implementar TLS (Let’s Encrypt):
apt install certbot5. Reverse proxy para apps
Sección titulada «5. Reverse proxy para apps»- Node.js
- Python
- Go
6. Optimización
Sección titulada «6. Optimización»worker_processes auto;7. Rate limiting
Sección titulada «7. Rate limiting»limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;8. Hardening
Sección titulada «8. Hardening»- firewall activo
- SELinux/AppArmor configurado
- no ejecutar como root
Resumen y Siguiente Paso
Sección titulada «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.
