Fundamentos de Nginx
Nginx es un servidor web y proxy inverso de alto rendimiento y confiabilidad, distribuido como software libre. Soporta despliegue en caliente, permitiendo operación continua 24/7 sin reiniicos durante meses y actualizaciones sin interrupciones. Optimizado para eficiencia, consume pocos recursos y gestiona hasta 50,000 conexiones simultáneas.
Características Clave
- Alto rendimiento y escalabilidad
- Arquitectura modular extensible
- Modelo asíncrono no bloqueante (similar a Node.js)
- Alta disponibilidad con operación ininterrumpida
- Soporte para actualizaciones en caliente
- Código abierto con ecosistema robusto
Casos de Uso
- Servicio de recursos estáticos desde sistema de archivos
- Proxy inverso con capacidades de caché y balanceo de carga
- Servicios API mediante OpenResty
Nginx y Node.js comparten conceptos como servidor HTTP y modelo asíncrono, pero se complementan: Nginx gestiona recursos de infraestructura (proxy, balanceo) mientras Node.js maneja lógica de negocio.
Instalación en CentOS
yum instalar nginx -y
Verifique los archivos instalados:
rpm -ql nginx
# Ruta de configuración principal
/etc/nginx/nginx.conf
# Archivos ejecutables
/usr/sbin/nginx
# Directorio de módulos
/usr/lib64/nginx/modulos
Comandos Esenciales
# Gestión con systemctl
systemctl habilitar nginx
systemctl iniciar nginx
systemctl recargar nginx
# Comandos directos
nginx -t # Verificar configuración
nginx -s recargar # Recargar sin reinicio
Configuración Básica
usuario www-data;
procesos_trabajo auto;
eventos {
conexiones_trabajo 2048;
}
http {
incluir /etc/nginx/mime.tipos;
servidor {
escuchar 8080;
servidor_nombre localhost;
ubicacion / {
raiz /var/www/html;
indice index.html;
}
}
}
Estructura jerárquica: bloque principal → eventos → http → servidor → ubicación.
Parámetros Clave
Procesos
procesos_trabajo 4;
afinidad_cpu 1000 0100 0010 0001;
Conexiones
conexiones_trabajo 4096;
tiempo_espera_conexion 70;
Manejo de Solicitudes
Ubicaciones
ubicacion ~* \.(jpg|png)$ {
alias /datos/recursos/;
}
Reescrituras
reescribir ^/galeria/(.*) /media/$1 permanente;
Headers
agregar_encabezado Control-Acceso-Origen *;
Proxy Inverso
servidor {
escuchar 80;
servidor_nombre proxy.ejemplo.com;
ubicacion / {
proxy_pass http://servidores_backend;
}
}
arriba servidores_backend {
servidor 192.168.1.10:8080;
servidor 192.168.1.11:8080;
}
Balanceo de Carga
arriba cluster_aplicacion {
hash $solicitud_uri;
servidor 10.0.0.10:8000 peso=3;
servidor 10.0.0.11:8000;
}
Estrategias: round-robin (predeterminado), hash, IP persistente, menor conexión.
Configuración de Caché
proxy_cache_path /cache/ niveles=1:2 llave_zon=cache_app:50m;
proxy_cache cache_app;
proxy_cache_valido 200 302 10m;
Seguridad TLS
servidor {
escuchar 443 ssl;
ssl_certificado /cert/server.crt;
ssl_certificado_key /cert/server.key;
}
Optimización GZIP
gzip activado;
gzip_tipos texto/css application/json;
gzip_nivel_compresion 6;
Arquitectura Interna
Modelo multi-proceso: proceso maestro gestiona workers hijos. Recarga sin interrupciones mediante señales HUP para actualización de configuración.