Configuración de Nginx
Esta guía explica cómo configurar Nginx como proxy inverso para tu instancia de Gigantics. Nginx proporciona terminación SSL, balanceo de carga y mejor rendimiento para tu despliegue de Gigantics.
Descripción General
Gigantics se ejecuta en el puerto 5000 por defecto y puede ser accedido directamente o a través de Nginx como proxy inverso. La configuración incluye:
- Terminación SSL/TLS
- Redirección de HTTP a HTTPS
- Soporte WebSocket para características en tiempo real
- Soporte para carga de archivos grandes
- Reenvío correcto de cabeceras
Instalación
Nginx no se proporciona con el software, puedes descargarlo desde:
Sitio Web Oficial: https://nginx.org/
Comandos de Instalación
Ubuntu/Debian:
CentOS/RHEL/Rocky Linux:
macOS (con Homebrew):
Windows: Descarga la versión para Windows desde el sitio web oficial y sigue el asistente de instalación.
Iniciar y Habilitar Nginx
Conexión Directa vs Proxy Nginx
Conexión Directa al Puerto 5000
Puedes acceder a Gigantics directamente conectándote a http://tuserver:5000 sin ningún proxy inverso (es decir, Nginx).
Esta es la configuración más simple y funciona para:
- Entornos de desarrollo
- Redes internas donde la seguridad se maneja a nivel de red
- Pruebas rápidas y evaluación
Qué hay detrás del puerto 5000: Gigantics se ejecuta en un servidor Node.js Express que proporciona:
- Capacidades de servidor web HTTP/HTTPS
- Endpoints de API REST
- API GraphQL con soporte WebSocket
- Servido de archivos estáticos para la interfaz web
- Gestión de sesiones y autenticación incorporada
- Manejo de carga de archivos
- Comunicación en tiempo real vía WebSockets
Usar Nginx como Proxy Inverso
Aunque la conexión directa funciona, usar Nginx como proxy inverso ofrece ventajas significativas:
| Característica | Conexión Directa | Con Proxy Nginx |
|---|---|---|
| Terminación SSL/TLS | ? Requiere configuración SSL de Node.js | ? Manejado por Nginx |
| Rendimiento | ?? Node.js un solo hilo | ? Multi-proceso, optimizado |
| Servido de Archivos Estáticos | ?? Manejado por Express | ? Optimizado por Nginx |
| Balanceo de Carga | ? No disponible | ? Soporte incorporado |
| Cabeceras de Seguridad | ?? Implementación manual | ? Configuración fácil |
| Limitación de Tasa | ? Requiere middleware adicional | ? Módulos Nginx incorporados |
| Caché | ?? Opciones limitadas | ? Estrategias de caché avanzadas |
| Compresión | ?? gzip básico | ? Compresión avanzada |
| Soporte HTTP/2 | ? Limitado en Node.js | ? Soporte completo HTTP/2 |
| Cargas de Archivos Grandes | ?? Intensivo en memoria | ? Almacenamiento en buffer eficiente |
| Monitoreo y Registro | ?? Registro básico | ? Registros de acceso avanzados |
Cuándo Usar Cada Enfoque
Usa Conexión Directa cuando:
- Configurando para desarrollo o pruebas
- Ejecutando en una red interna segura
- Necesitas la configuración más simple posible
- SSL es manejado por un balanceador de carga o servicio en la nube
Usa Proxy Nginx cuando:
- Desplegando a producción
- Necesitas terminación SSL/TLS
- El rendimiento y escalabilidad son importantes
- Quieres características de seguridad avanzadas
- Necesitas servir múltiples aplicaciones
- Quieres mejor monitoreo y registro
Configuración de Producción
Aquí está la configuración recomendada de Nginx para Gigantics:
Parámetros de Configuración Explicados
Configuración del Bloque del Servidor
| Parámetro | Descripción | Valor Recomendado |
|---|---|---|
server_name | Nombre(s) de dominio para este bloque de servidor | Tu(s) dominio(s) real(es) |
listen 80 | Escuchar en el puerto HTTP 80 | Puerto HTTP estándar |
listen 443 ssl | Escuchar en el puerto HTTPS 443 con SSL | Puerto HTTPS estándar |
Configuración SSL
| Parámetro | Descripción | Valor Recomendado |
|---|---|---|
ssl_certificate | Ruta al archivo de certificado SSL | /etc/nginx/certs/tu_cert.crt |
ssl_certificate_key | Ruta al archivo de clave privada SSL | /etc/nginx/certs/tu_clave.key |
Configuración de Carga del Cliente
| Parámetro | Descripción | Valor Recomendado |
|---|---|---|
client_max_body_size | Tamaño máximo del cuerpo de la solicitud del cliente | 500m (para grandes datasets) |
client_body_buffer_size | Tamaño del buffer para leer el cuerpo de la solicitud del cliente | 4m |
large_client_header_buffers | Número y tamaño de buffers para cabeceras grandes | 4 32k |
Cabeceras del Proxy
| Parámetro | Descripción | Propósito |
|---|---|---|
proxy_set_header Host $host | Reenviar la cabecera host original | Mantiene información correcta del host |
proxy_set_header X-Real-IP $remote_addr | Reenviar la IP real del cliente | Para registro y seguridad |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for | Reenviar IP del cliente a través de cadena de proxies | Para seguimiento de IP a través de proxies |
proxy_set_header X-Forwarded-Host $host | Reenviar el host original | Para enrutamiento basado en host |
Configuración de Tiempo de Espera
| Parámetro | Descripción | Valor Recomendado |
|---|---|---|
proxy_connect_timeout | Tiempo de espera para establecer conexión al backend | 90s |
proxy_send_timeout | Tiempo de espera para transmitir solicitud al backend | 90s |
proxy_read_timeout | Tiempo de espera para leer respuesta del backend | 90s |
Configuración de Buffer
| Parámetro | Descripción | Valor Recomendado |
|---|---|---|
proxy_buffer_size | Tamaño del buffer para leer cabeceras de respuesta | 4k |
proxy_buffers | Número y tamaño de buffers para leer respuesta | 4 32k |
proxy_busy_buffers_size | Tamaño del buffer cuando la respuesta se envía al cliente | 64k |
proxy_temp_file_write_size | Tamaño de datos escritos al archivo temporal a la vez | 64k |
Redirección de HTTP a HTTPS
Para redirigir automáticamente el tráfico HTTP a HTTPS:
Cabeceras de Seguridad
Añade estas cabeceras de seguridad para protección mejorada:
Balanceo de Carga (Opcional)
Para configuraciones de alta disponibilidad, puedes configurar balanceo de carga:
Probando Tu Configuración
Probando Conexión Directa
Antes de configurar Nginx, prueba que Gigantics es accesible directamente:
-
Verifica si Gigantics está funcionando:
-
Prueba conexión WebSocket:
Probando Configuración de Nginx
-
Probar configuración de Nginx:
-
Recargar Nginx:
-
Verificar estado de Nginx:
-
Probar a través de Nginx:
Solución de Problemas
Problemas Comunes
| Problema | Solución |
|---|---|
| 502 Bad Gateway | Verifica si Gigantics está funcionando en el puerto correcto (predeterminado: 5000) |
| La conexión WebSocket falla | Asegúrate que proxy_http_version 1.1 y las cabeceras Upgrade estén configuradas en el bloque de location principal |
| La carga de archivos grandes falla | Incrementa client_max_body_size en Nginx o los límites del parser body de Node.js |
| Errores de certificado SSL | Verifica rutas de certificados y permisos |
| La conexión directa funciona pero Nginx no | Verifica si Gigantics está vinculado a localhost en lugar de 0.0.0.0 |
| El servidor Node.js no es accesible | Asegúrate que Gigantiics esté escuchando en la interfaz y puerto correctos |
Archivos de Registro
Verifica estos archivos de registro para depuración:
- Registro de errores de Nginx:
/var/log/nginx/error.log - Registro de acceso de Nginx:
/var/log/nginx/access.log - Registros de Gigantics: Verifica tu ubicación configurada de registros
Integración con la Configuración de Gigantics
Al configurar Gigantics con Nginx, asegúrate:
- Habilitar Nginx en configuración: Marca la opción "Habilitar Nginx" en la configuración avanzada
- Configurar SSL: Proporciona tus rutas de certificado y clave SSL
- Establecer puerto de redirección: Configura redirección HTTP a HTTPS si es necesario
- Actualizar configuración del servidor: Asegúrate que Gigantics escuche en la interfaz correcta
El proceso de configuración generará la configuración apropiada de Nginx basada en tus ajustes.
Opcional: Bloque de Location Dedicado para GraphQL
Aunque el bloque de location principal maneja todas las solicitudes incluyendo GraphQL, opcionalmente puedes añadir un bloque de location dedicado /graphql para soporte WebSocket mejorado y optimizaciones específicas.
Cuándo Usar un Bloque GraphQL Dedicado
Usa esta configuración opcional cuando:
- Necesitas rendimiento WebSocket mejorado para suscripciones GraphQL
- Quieres diferentes configuraciones de tiempo de espera para operaciones GraphQL
- Necesitas reglas de caché específicas para consultas GraphQL
- Quieres separar tráfico GraphQL del tráfico web regular
- Estás experimentando problemas de conexión WebSocket con el bloque de location principal
Configuración GraphQL Opcional
Puedes añadir este bloque de location después de tu bloque de location principal:
Opciones de Configuración para Bloque GraphQL
| Parámetro | Descripción | Valor Recomendado | Propósito |
|---|---|---|---|
proxy_connect_timeout | Tiempo de espera de conexión para GraphQL | 60s | Establecimiento de conexión más rápido |
proxy_send_timeout | Tiempo de espera de envío para GraphQL | 60s | Transmisión rápida de solicitudes |
proxy_read_timeout | Tiempo de espera de lectura para GraphQL | 300s | Suscripciones de larga duración |
proxy_cache_bypass | Omitir caché para WebSocket | $http_upgrade | Datos en tiempo real |
proxy_no_cache | Deshabilitar caché para WebSocket | $http_upgrade | Datos siempre frescos |
Por Qué Esto es Opcional
El bloque de location principal ya maneja GraphQL porque:
- Incluye
proxy_http_version 1.1 - Tiene cabeceras
UpgradeyConnectionpara soporte WebSocket - Gigantics maneja el enrutamiento GraphQL internamente
Usa el bloque dedicado solo si necesitas:
- Diferentes configuraciones de tiempo de espera para GraphQL vs solicitudes regulares
- Rendimiento WebSocket mejorado para características en tiempo real
- Comportamiento de caché específico para consultas GraphQL
- Solución de problemas de conexión WebSocket
Probando Configuración GraphQL
Prueba endpoints regulares y GraphQL: