Saltar a contenido

Guía de Configuración de Nginx

Entradas de Nginx en la configuración de Clarive

El servidor Nginx vinculado a su instalación de Clarive usa los siguientes directorios y archivos:

  • CLARIVE_BASE/config/nginx/nginx.conf - configura cómo se ejecutará Nginx
  • CLARIVE_BASE/logs/nginx.pid - contiene el PID del Nginx iniciado por Clarive, a menos que el usuario lo anule en el nginx.conf. El archivo PID solo existe cuando Nginx está iniciado y en ejecución.
  • CLARIVE_BASE/logs/nginx-access.log - logs de acceso de Nginx, con cada cliente que accede a este Nginx
  • CLARIVE_BASE/logs/nginx-error.log - mensajes de error de Nginx

Es posible anular los valores predeterminados en su archivo de configuración CLARIVE_BASE/config/MICONFIG.yml estableciendo las diferentes variables individualmente:

# Establezca el directorio home de configuración de Nginx:

nginx_prefix: /opt/clarive/config/nginx

# Establezca el archivo de configuración directamente:

nginx_config: /opt/nginx/conf/nginx.conf

# Indique a Clarive dónde encontrar el PID, para que coincida con su nginx.conf

nginx_pid: /opt/clarive/logs/nginx.pid

Use el comando cla nginx para iniciar, detener o recargar la configuración de Nginx.

Warning

Los directorios pueden ser anulados modificando el archivo nginx.conf directamente, pero Clarive puede no ser capaz de encontrar los archivos de configuración y PID necesarios para que funcionen los comandos cla nginx.

Comprender el nginx.conf de Clarive

La configuración de Nginx proporcionada para el servidor Clarive se construye dinámicamente usando una plantilla con valores introducidos durante cla setup. Esta documentación proporciona un desglose detallado de las secciones y directivas de la configuración.

Si desea leer el Nginx original, especialmente si tiene una instalación heredada de Clarive+Nginx, puede leer la plantilla para verificar las recomendaciones de configuración actualizadas.

CLARIVE_HOME/templates/nginx.conf

Alternativamente, puede ejecutar cla setup midummy para crear una configuración desechable llamada midummy y luego copiar el archivo nginx.conf resultante que se creará bajo CLARIVE_BASE/config/nginx/nginx.conf.

Configuración Principal

  • worker_processes: Establece el número de procesos worker de Nginx. Esto debería establecerse al número de núcleos de CPU para un rendimiento óptimo.
  • error_log: La ruta donde Nginx registrará cualquier error que encuentre.
  • pid: La ruta donde Nginx guarda el PID del proceso principal.

Módulo de Eventos

  • worker_connections: Esta directiva limita el número de conexiones simultáneas que puede manejar un solo proceso worker.

Módulo HTTP

  • include: Esto incluye configuraciones adicionales. Aquí, está importando tipos MIME para asegurar que los archivos se sirvan con el encabezado de tipo correcto.
  • default_type: El tipo MIME predeterminado que Nginx usará si no puede determinar uno para un archivo dado.
  • log_format: Define la estructura y contenido de las entradas en el log de acceso.
  • access_log: Especifica dónde Nginx guardará sus logs de acceso, que rastrean todas las solicitudes entrantes.

Rutas de Archivos Temporales

  • *_temp_path: Estas rutas indican dónde Nginx almacena archivos temporales para diversos propósitos. Por ejemplo, client_body_temp_path se usa para almacenar en búfer los cuerpos de solicitud del cliente, y proxy_temp_path se usa al hacer proxy de solicitudes.

Compresión y Codificación

  • brotli y gzip: Habilita o deshabilita algoritmos de compresión específicos. La compresión puede reducir la cantidad de datos enviados por la red, mejorando los tiempos de carga.
  • brotli_static: Habilita servir archivos Brotli precomprimidos.
  • brotli_comp_level: Establece el nivel de compresión para Brotli (varía de 1 a 11).
  • brotli_types: Especifica qué tipos MIME se comprimirán usando Brotli.
brotli              on;
brotli_static       on;
brotli_comp_level   4;
brotli_types        text/plain text/css text/javascript text/js text/xml application/json application/javascript
                    application/x-javascript application/xml
                    application/xml+rss application/x-font-ttf image/svg+xml font/opentype
                    font/woff font/woff2 font/woff3 application/x-font-woff;

Bloque Server

  • server_name: Indica a qué nombres de dominio o direcciones IP responderá este bloque server.
  • listen: Designa en qué puerto (y opcionalmente IP) escuchará el servidor.

Configuración SSL

Cuando SSL está configurado:

  • ssl_certificate y ssl_certificate_key: Apuntan al certificado SSL y su clave privada correspondiente, respectivamente.
  • ssl_protocols: Determina qué versiones del protocolo SSL/TLS se pueden usar.
  • ssl_ciphers: Especifica qué cifrados de encriptación son permisibles.
  • ssl_prefer_server_ciphers: Asegura que las preferencias de cifrado del servidor tengan precedencia.

Lea más sobre configuración SSL más adelante, bajo Asegurar Nginx.

Configuración de Solicitud y Respuesta

  • client_max_body_size: Determina el tamaño máximo del cuerpo de solicitud del cliente. Esto es importante para las cargas.
  • Otras directivas como client_body_buffer_size y large_client_header_buffers ajustan cómo Nginx almacena en búfer y procesa las solicitudes del cliente.

Bloques Location

Estos bloques definen cómo Nginx responde a solicitudes para URLs específicas o patrones de URL:

  • location /: Configuración principal para manejar la mayoría de las solicitudes HTTP. La directiva proxy_pass indica que las solicitudes deben ser reenviadas al servidor de aplicación de Clarive.
  • location /pubsub: Dedicado para la funcionalidad pub/sub de Clarive.
  • location /static*: Múltiples bloques dedicados a servir varios archivos estáticos y assets para la aplicación.
  • location ~ /socket.io/: Configuraciones específicas para manejar conexiones WebSocket.

Cada bloque location tiene directivas específicas para el manejo de solicitud/respuesta, como configuraciones de proxy, tamaños de búfer y timeouts.

Asegurar Nginx

Para configurar su nginx.conf para forzar el uso solo de TLS 1.2 y TLS 1.3, así como asegurar el uso de AES (con tamaños de clave mayores a 128 bits) o CHACHA20+POLY1305 256, siga los pasos a continuación:

Configurar Protocolos y Cifrados SSL:

Dentro del bloque http o dentro de su bloque server específico de su archivo nginx.conf o archivo de configuración de sitio respectivo, establezca las directivas ssl_protocols y ssl_ciphers de la siguiente manera:

ssl_protocols TLSv1.2 TLSv1.3;  # Asegúrese de usar versiones modernas de TLS
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384';
ssl_prefer_server_ciphers on;

Asegúrese también de tener ssl_prefer_server_ciphers off; para que se respete la preferencia de lista de cifrado del cliente (especialmente para TLS 1.3).

Redirigir de HTTP a HTTPS:

Para forzar la redirección de todo el tráfico HTTP a HTTPS, puede configurar un bloque server separado que escuche en el puerto 80 y redirija todas las solicitudes a HTTPS.

Forzar una redirección de HTTP a HTTPS asegura que todos los datos transmitidos entre el navegador del usuario y el servidor estén encriptados, mejorando así la confidencialidad y seguridad. Esto previene ataques man-in-the-middle, escuchas clandestinas y manipulación de datos que pueden ocurrir cuando los datos se envían por HTTP sin encriptar.

server {
    listen 80;
    server_name mi.servidor.clarive;  # <--- cambie esto a su servidor
    location / {
        return 301 https://$host$request_uri;
    }
}

Si está usando una configuración alternativa 8080 (8443 para HTTPS), haga lo siguiente:

server {
    listen 8080;
    server_name mi.servidor.clarive;  # <--- cambie esto a su servidor
    location / {
        return 301 https://$host:8443$request_uri;
    }
}

También debe deshabilitar HTTP en su configuración actual del servidor, comentando la línea del puerto HTTP:

    #listen 8080;

Note

Asegúrese de usar un certificado SSL válido para su dominio Clarive, de lo contrario sus usuarios serán constantemente advertidos de que los certificados SSL de Clarive no son seguros y necesitarán realizar pasos adicionales para abrir el sitio web de la aplicación principal de Clarive.

Apuntar a sus Certificados SSL

Asegúrese de tener la ruta a sus certificados SSL y claves privadas correctamente configuradas. Por ejemplo:

ssl_certificate /etc/nginx/ssl/nombre_de_su_dominio.crt;
ssl_certificate_key /etc/nginx/ssl/nombre_de_su_dominio.key;

Dividir la carga del servidor Clarive (o failover)

Puede hacer que Nginx intente con más de un servidor web Clarive para mejorar los tiempos de respuesta para solicitudes hechas a la web y pubsub de Clarive. Hace eso configurando una entrada upstream en el archivo nginx.conf.

http {
    # ... etc ...

    upstream clapool {
        server misclariveserver1:3000 max_fails=1 fail_timeout=1s;
        server misclariveserver2:3000 max_fails=1 fail_timeout=1s;
    }

Reemplace misclariveserver1 y misclariveserver2 con el hostname o IP de sus servidores Clarive.

Ahora actualice la sección server { ... } para apuntar al pool upstream que acaba de crear:

    server {
        # ... etc ...
        location / {
            proxy_pass     http://clapool;  # <-- use el nombre del pool en upstream
            # ... etc ...
        }
        # ... etc ...
    }

Lo mismo se puede hacer para el puerto del servidor pubsub, que es diferente del puerto web principal, por defecto 3001:

http {
    # ... etc ...
    upstream clapubsubpool {
        server misclariveserver1:3001 max_fails=1 fail_timeout=1s;
        server misclariveserver2:3001 max_fails=1 fail_timeout=1s;
    }

    server {
        # ...etc...
        location /pubsub {
            proxy_pass         http://clapubsubpool/pubsub;
        }
    }

    # ...etc...
}

Recargar o Reiniciar Nginx

Después de realizar los cambios, necesita recargar o reiniciar el servicio Nginx para que la nueva configuración surta efecto:

cla nginx-restart -c MICONFIG

O, si nginx se está ejecutando independientemente en su sistema:

nginx -s reload

Asegúrese de probar su configuración después de realizar estos cambios. Herramientas como SSL Labs pueden proporcionar un análisis completo de su configuración SSL/TLS.

Variables de Configuración de la Plantilla

Para fines de documentación, estas son las variables de cla setup que se completan en el archivo de plantilla CLARIVE_HOME/templates/nginx.conf.

  • $base: El directorio base para la instalación de Clarive. Las rutas relacionadas con logs y archivos temporales usualmente provienen de este directorio.
  • $home: Directorio home para la aplicación Clarive, usado principalmente para servir contenido estático.
  • $nginx_host: El nombre de dominio o dirección IP a la que responde Nginx. Por defecto está establecido en 'localhost'.
  • $nginx_port: Puerto donde Nginx escucha conexiones HTTP entrantes. Por defecto está establecido en 8080.
  • $nginx_pid: Ubicación donde Nginx almacenará su ID de proceso.
  • $max_body_size: El tamaño máximo del cuerpo en una solicitud del cliente, ej., cargas de archivos. El valor predeterminado es '2g', que significa 2 gigabytes.
  • $worker_processes: Dicta cuántos procesos worker genera Nginx. Por defecto está establecido en 2.
  • $worker_connections: El número máximo de conexiones que cada proceso worker puede manejar simultáneamente. Por defecto está establecido en 1024.
  • $clarive_url: URL que apunta al servidor de aplicación principal de Clarive.
  • $pubsub_url: URL dedicada para la funcionalidad de publicar/suscribir de Clarive.
  • $server_ssl_port: El puerto donde Nginx escucha conexiones HTTPS entrantes.
  • $ssl_certificate: Ubicación del certificado SSL usado para HTTPS.
  • $ssl_certificate_key: Ubicación de la clave privada correspondiente al certificado SSL.

Note

Esta configuración de Nginx está personalizada para las necesidades del servidor Clarive, equilibrando rendimiento, seguridad y funcionalidad. Siempre asegúrese de hacer una copia de seguridad de su configuración y probar los cambios en un entorno controlado antes de aplicarlos en producción.