BLOG | NGINX

Anunciamos NGINX Plus R32

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Prabhat Dixit
Prabhat Dixit
Publicado el 28 de mayo de 2024

Nos complace anunciar la disponibilidad de NGINX Plus Release 32 (R32). Basado en NGINX de código abierto, NGINX Plus es el único servidor web de software todo en uno, balanceador de carga, proxy inverso, caché de contenido y puerta de enlace API.

Las características nuevas y mejoradas de NGINX Plus R32 incluyen:

  • Almacenamiento en caché de certificados SSL : NGINX Plus R32 introduce mejoras significativas en el tiempo de inicio de NGINX y el uso de memoria en casos de configuraciones con una gran cantidad de ubicaciones con pares de claves/certificados SSL repetidos.
  • Módulo Stream_pass : NGINX Plus R32 ahora permite que el módulo de transmisión funcione como enrutador, lo que permite que las conexiones se pasen condicionalmente desde el módulo de transmisión a otros módulos como http, correo o de regreso a la transmisión misma.
  • Imágenes de contenedores oficiales de NGINX Plus : NGINX Plus R32 presenta la disponibilidad de imágenes de contenedores oficiales de NGINX Plus para tiempos de ejecución de contenedores privilegiados y no privilegiados. Además, ambos métodos de implementación se entregan con imágenes de contenedor opcionales que incluyen NGINX Agent, un demonio complementario que permite una integración perfecta con las soluciones del plano de administración NGINX.

Para completar el lanzamiento se incluyen nuevas características y correcciones de errores heredadas de NGINX de código abierto y actualizaciones del módulo JavaScript de NGINX.

Cambios importantes en el comportamiento

Nota: Si está actualizando desde una versión distinta a NGINX Plus R31, asegúrese de consultar la sección Cambios importantes en el comportamiento en los blogs de anuncios anteriores para todas las versiones entre su versión actual y esta.

Desuso del módulo OpenTracing

El módulo OpenTracing, introducido en NGINX Plus R18, está siendo obsoleto y marcado para su eliminación en NGINX Plus R34. Los paquetes asociados estarán disponibles con todas las versiones de NGINX Plus hasta entonces. Recomendamos encarecidamente reemplazar el uso del módulo OpenTracing con el módulo OpenTelemetry , introducido en NGINX Plus R29 .

Eliminación del módulo ModSecurity

El módulo ModSecurity finalizó su soporte el 31 de marzo de 2024. Como resultado, los paquetes modsec se han eliminado del repositorio NGINX Plus y ya no estarán disponibles en dicho repositorio en el futuro.

Actualización de clave PGP

Los paquetes NGINX Open Source y NGINX Plus están firmados mediante una clave PGP. Esta clave caducará el 16 de junio de 2024. Hemos actualizado la fecha de vencimiento de la clave para que los paquetes existentes puedan seguir verificándose después del 16 de junio de 2024. Generaremos nuevos pares de claves para firmar paquetes para los próximos lanzamientos.

Todos los usuarios de NGINX deben descargar e instalar la clave PGP actualizada siguiendo estos pasos:

En Ubuntu/Debian:

wget -qO-https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

En RHEL/CentOS:

sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.key

No podrá verificar sus firmas de software después del 16 de junio de 2024, hasta que actualice su clave.

Política futura de empaquetado y lanzamiento

En futuras versiones de NGINX Plus, optimizaremos nuestra política de empaquetado y lanzamiento. NGINX Plus se construirá y probará únicamente en las últimas versiones de las distribuciones de sistemas operativos compatibles. Si está instalando NGINX Plus en distribuciones anteriores, su administrador de paquetes puede sugerirle actualizar las bibliotecas y paquetes dependientes.

Cambios en el soporte de la plataforma

Se han realizado los siguientes cambios en las plataformas compatibles en esta versión.

Nuevos sistemas operativos compatibles:

  • Ubuntu 24.04

Sistemas operativos más antiguos eliminados:

  • FreeBSD 12, que alcanzó el fin de su vida útil el 31 de diciembre de 2023

Sistemas operativos antiguos obsoletos y programados para su eliminación en NGINX Plus R33:

  • CentOS7/RHEL7/Oracle Linux 7
  • Alpine Linux 3.16

Nuevas funciones en detalle

Almacenamiento en caché de certificados SSL para mejorar el comportamiento de carga de NGINX

Anteriormente, NGINX cargaba un certificado, una clave o una lista de revocación de certificados cada vez que se hacía referencia a él en la configuración de NGINX. Esto significaba que múltiples referencias al mismo objeto resultaban en un número igual de recargas de ese objeto. Esta latencia se agravaría al heredar directivas como listas de certificados confiables. En determinadas condiciones, este comportamiento afectaría significativamente el tiempo de inicio de NGINX y podría requerir grandes cantidades de memoria para almacenar configuraciones.

Con el nuevo comportamiento, las directivas SSL ahora hacen referencia a archivos de certificados almacenados en caché y objetos relacionados. Como resultado, el uso de memoria y los tiempos de carga de las configuraciones que hacen referencia repetidamente a los mismos objetos de certificado se reducen drásticamente. El beneficio es más evidente en los casos que involucran grandes configuraciones de NGINX donde un pequeño conjunto de certificados confiables se referencian en una gran cantidad de bloques de ubicación.

Aquí se muestra una visualización de la mejora del tiempo de carga donde NGINX está configurado con aproximadamente 5400 bloques de ubicaciones (de nivel superior y anidados) y 878 certificados.

mejora del tiempo de carga

Observe la caída significativa en los tiempos de carga hacia el lado derecho del gráfico, donde el tiempo de carga promedio disminuye de aproximadamente 40 segundos antes del cambio a ~6 segundos con el nuevo comportamiento.

Pasar conexiones del módulo de transmisión a otros módulos

NGINX Plus R32 hereda una característica de NGINX de código abierto 1.25.5 que añade una nueva capa de configurabilidad a NGINX. En concreto, el módulo de flujo de NGINX ahora puede funcionar como un enrutador, sirviendo como proxy y con la capacidad de transferir conexiones desde el contexto de flujo a otros contextos como http, correo o a un servidor virtual independiente dentro del propio contexto de flujo.

Esta funcionalidad está disponible como parte del módulo ngx_stream_pass_module , presentado en esta versión. El módulo tiene una única directiva “pass” que puede usarse para especificar la dirección a la que pasar las conexiones del cliente. La dirección se puede especificar mediante una combinación de dirección IP y puerto, una ruta de socket o referenciarse mediante variables NGINX.

Con esta funcionalidad, los clientes que deseen ejecutar todo su tráfico a través de un único punto final L4 ahora pueden finalizar las conexiones SSL en el contexto de flujo L4 y pasarlas a otros módulos (http, correo) u otros servidores virtuales dentro del contexto de flujo. Además, las conexiones SSL pueden finalizarse condicionalmente en función de los nombres de servidor o protocolos, mientras se envía el tráfico restante a otro lugar. Esto desbloquea un nuevo conjunto de posibles comportamientos de configuración para administrar el tráfico desde un único punto final.

El siguiente fragmento de configuración finaliza las conexiones SSL en el módulo de transmisión y las pasa condicionalmente al contexto http u otro servidor virtual en el contexto de transmisión, según el nombre del servidor solicitado.

http {
servidor {
escuchar 8000;

ubicación / {
devolver 200 foo;
}
}
}

transmisión {
mapa $nombre_servidor_ssl $puerto_de_contraseña {
foo.ejemplo.com 8000;
predeterminado 9001;

}

servidor {
escuchar 9000 ssl;

certificado_ssl dominio.crt;
clave_certificado_ssl dominio.clave;

contraseña 127.0.0.1:$puerto_de_contraseña;
}
servidor{
escuchar 9001;
devolver barra\n;
}

}

En este ejemplo, todas las conexiones SSL finalizan en el bloque del servidor de transmisión. Según el nombre del servidor en la solicitud entrante, las conexiones se pasan al servidor http que escucha en el puerto 8000 o al servidor virtual de transmisión que escucha en el puerto 9001.

Otra aplicação del módulo aborda casos de uso donde un módulo de terceros no admite la terminación SSL. En tales escenarios, el módulo stream_pass puede finalizar las conexiones cifradas TLS antes de pasarlas al módulo de terceros.

Este ejemplo demuestra cómo el módulo RTMP , que de forma nativa no admite SSL, puede usar el módulo stream_pass para aceptar tráfico cifrado TLS.

rtmp {
servidor {
escuchar 1935;#rtmp

aplicação foo{

vivir;
}
}
}

arroyo {
servidor {
escuchar 1936 ssl; #rtmps

certificado_ssl dominio.crt;
ssl_certificate_key dominio.clave;

pase 127.0.0.1:1935;
}
}

En este fragmento de configuración, la conexión SSL finaliza en el bloque del servidor de transmisión y pasa a rtmp. La conexión aparece sin cifrar para el módulo RTMP, lo que elimina la necesidad de personalización adicional o sobrecarga de procesamiento para soportar conexiones SSL.

Imágenes de contenedores NGINX Plus

NGINX Plus R32 incluye la disponibilidad oficial de imágenes de contenedores NGINX Plus para la ejecución privilegiada y no privilegiada de NGINX Plus. Ambos tipos de contenedores también están disponibles con instalaciones opcionales de NGINX Agent para una fácil conectividad a los planos de administración compatibles con NGINX. Las imágenes se pueden descargar del registro NGINX, disponible en: private-registry.nginx.com. Siga estas instrucciones para acceder a la imagen con su certificado y clave NGINX Plus o JSON Web Token (JWT).

Otras mejoras y correcciones de errores en NGINX Plus R32

Corrección de errores en el módulo MQTT

  • Paquetes malformados al utilizar propiedades predeterminadas: Esta versión contiene una solución para un problema que provocaba paquetes malformados en el módulo Message Queueing Telemetry Transport (MQTT), introducido en NGINX Plus R29 . Anteriormente, cuando el campo de propiedades estaba presente y contenía valores predeterminados para todas las propiedades en el mensaje MQTT Connect, la longitud del paquete saliente no tenía en cuenta el campo de longitud de propiedad (1 byte). Esto provocó que la longitud del paquete fuera 1 byte menos de lo esperado y generó un paquete malformado. Esta corrección en R32 aborda ese problema.

Corrección de errores en el módulo zone_sync

  • Fuga de memoria al recargar la configuración: Anteriormente, las operaciones de sincronización de colas pendientes utilizaban enlaces de cadena asignados desde un grupo distinto que nunca se liberaba. Esto provocó fugas de memoria en el proceso maestro, así como en todos los procesos de trabajo. La solución en esta versión revierte a una implementación de sincronización de zona anterior que utiliza un grupo de ciclos para la cola pendiente.

Correcciones de seguridad

Se identificaron y solucionaron los siguientes problemas de seguridad potenciales en la implementación experimental HTTP3/QUIC.

  • Desbordamiento de montón con escritura ( CVE-2024-32760 ): Las instrucciones del codificador HTTP/3 no reveladas pueden provocar que los procesos de trabajo de NGINX finalicen o provoquen otros posibles impactos.
  • Desbordamiento de pila/uso después de la liberación ( CVE-2024-31079 ): Las solicitudes HTTP/3 no reveladas pueden provocar que los procesos de trabajo de NGINX finalicen o provoquen otros posibles impactos. Este ataque requiere que una solicitud se programe específicamente durante el proceso de drenaje de la conexión, sobre el cual el atacante no tiene visibilidad y tiene influencia limitada.
  • Desreferencia de puntero nulo con encabezado vacío ( CVE-2024-35200 ): Las solicitudes HTTP/3 no reveladas pueden provocar que los procesos de trabajo de NGINX finalicen o provoquen otros posibles impactos.
  • Divulgación de memoria durante el protocolo de enlace QUIC ( CVE-2024-34161 ): Cuando la infraestructura de red admite una Unidad Máxima de Transmisión (MTU) de 4096 o mayor sin fragmentación, los mensajes QUIC no revelados pueden provocar que los procesos de trabajo de NGINX finalicen o provoquen una fuga de memoria previamente liberada.

Cambios heredados de NGINX de código abierto

NGINX Plus R32 se basa en NGINX Open Source 1.25.5 y hereda cambios funcionales, características y correcciones de errores realizados desde que se lanzó NGINX Plus R31 (en NGINX 1.25.4 y 1.25.5).

Características:

  • Servidores virtuales en el módulo de transmisión.
  • El módulo ngx_stream_pass_module.
  • Los parámetros "deferred", "accept_filter" y "setfib" de la directiva "listen" en el módulo de transmisión.
  • Detección del tamaño de la línea de caché para algunas arquitecturas.
  • Soporte para Homebrew en Apple Silicon.

Corrección de errores:

  • Corrección de errores y mejoras en la compilación cruzada de Windows.
  • Cierre de conexión inesperado al usar 0-RTT en QUIC.
  • Las conexiones con operaciones AIO pendientes podrían cerrarse prematuramente durante el apagado ordenado de procesos de trabajo antiguos.
  • Las alertas de fuga de sockets ya no se registran cuando se solicita un apagado rápido después del apagado ordenado de procesos de trabajo antiguos.
  • Podría ocurrir un error en el descriptor de socket, una pérdida de socket o una falla de segmentación en un proceso de trabajo (para proxy SSL) si se utilizó AIO en una subsolicitud.
  • Podría ocurrir una falla de segmentación en un proceso de trabajo si se utilizó el proxy SSL junto con la directiva "image_filter" y los errores con el código 415 se redirigieron con la directiva "error_page".
  • Corrección de errores y mejoras en HTTP/3.

Seguridad:

  • Al utilizar HTTP/3, puede ocurrir un error de segmentación en un proceso de trabajo mientras se procesa una sesión QUIC especialmente diseñada ( CVE-2024-24989 , CVE-2024-24990 ).

Para obtener la lista completa de nuevos cambios, características, correcciones de errores y soluciones alternativas heredadas de versiones recientes, consulte el archivo de cambios de NGINX.

Cambios en el módulo JavaScript de NGINX

NGINX Plus R32 incorpora cambios de la versión 0.8.4 del módulo NGINX JavaScript (njs). La siguiente es una lista de cambios notables en njs desde 0.8.2 (que fue la versión enviada con NGINX Plus R31).

Características

  • Característica: se puede configurar el encabezado del servidor para el encabezado saliente.
  • Característica: Compatibilidad del motor QuickJS en CLI.

Cambios

  • Mejora: validación de argumentos URI y args en r.subrequest().
  • Mejora: comprueba si hay variables js_set duplicadas.

Corrección de errores

  • Corrección de errores: se corrigió Headers.set().
  • Corrección de errores: se corrigió js_set con valores de búfer.
  • Corrección de errores: se corrigió el método clear() de un diccionario compartido cuando no se especifica un tiempo de espera.
  • Corrección de errores: se corrigieron las estadísticas de stub_status cuando js_periodic está habilitado.
  • Corrección de errores: se corrigió la compilación con libxml2 2.12 y versiones posteriores.
  • Corrección de errores: se corrigió el constructor de fecha para desbordamientos y con valores NaN.
  • Corrección de errores: se corrigió el desbordamiento en querystring.parse().
  • Corrección de errores: se corrigió la posible sobrelectura del búfer en String.prototype.match().
  • Corrección de errores: se corrigió el análisis de bucles for-in.
  • Corrección de errores: se corrigió el análisis de literales hexadecimales, octales y binarios sin dígitos.
  • Corrección de errores: se corrigió el método clear() de un diccionario compartido sin tiempo de espera introducido en0.8.3 .
  • Corrección de errores: se corrigió el método r.send() de un diccionario compartido sin un tiempo de espera con el argumento Buffer.
  • Corrección de errores: se corrigió atob() con cadenas base64 sin relleno.

Para obtener una lista completa de todas las características, cambios y correcciones de errores, consulte el registro de cambios de njs.

Actualice o pruebe NGINX Plus

Si está utilizando NGINX Plus, le recomendamos encarecidamente que actualice a NGINX Plus R32 lo antes posible. Además de todas las nuevas y excelentes funciones, también obtendrá varias correcciones y mejoras adicionales, lo que hará que sea más fácil para NGINX ayudarlo si necesita generar un ticket de soporte.

Si no eres usuario de NGINX Plus, te animamos a que lo pruebes. Puede usarlo para casos de uso de seguridad, equilibrio de carga y puerta de enlace de API, o como un servidor web totalmente compatible con API de administración y monitoreo mejoradas. Comience hoy con una prueba gratuita de 30 días .


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.