Nos complace anunciar la disponibilidad de NGINX Plus versión 32 (R32). Basado en NGINX Open Source, NGINX Plus es la única solución de software todo en uno que integra servidor web, equilibrador de carga, proxy inverso, caché de contenido y puerta de enlace de API.
Entre las funciones nuevas y mejoradas de NGINX Plus R32 se incluyen:
- Almacenamiento en caché de certificados SSL — NGINX Plus R32 mejora significativamente el tiempo de inicio de NGINX y el uso de memoria en configuraciones con un gran número de ubicaciones que utilizan repetidamente los mismos pares de certificado y clave SSL.
- Módulo Stream_pass — NGINX Plus R32 permite ahora que el módulo stream funcione como enrutador, de modo que las conexiones puedan transferirse de forma condicional desde el módulo stream a otros módulos, como http o mail, o de vuelta al propio módulo stream.
- Imágenes de contenedor oficiales de NGINX Plus — NGINX Plus R32 incorpora imágenes de contenedor oficiales de NGINX Plus para entornos de ejecución de contenedores tanto con privilegios como sin ellos. Además, ambos métodos de implementación ofrecen imágenes de contenedor opcionales que incluyen NGINX Agent, un demonio complementario que permite una integración fluida con las soluciones del plano de gestión de NGINX.
La versión se completa con nuevas funcionalidades y correcciones de errores heredadas de NGINX Open Source, así como con actualizaciones del módulo JavaScript de NGINX.
Cambios importantes en el comportamiento
Nota: Si va a actualizar desde una versión distinta de 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 comprendidas entre la que utiliza actualmente y esta.
Obsolescencia del módulo OpenTracing
El módulo OpenTracing, introducido en NGINX Plus R18, está quedando obsoleto y se ha previsto eliminarlo en NGINX Plus R34. Hasta entonces, los paquetes asociados estarán disponibles con todas las versiones de NGINX Plus. Recomendamos encarecidamente sustituir el uso del módulo OpenTracing por el módulo OpenTelemetry, introducido en NGINX Plus R29.
Eliminación del módulo ModSecurity
El soporte del módulo ModSecurity finalizó el 31 de marzo de 2024. Como consecuencia, los paquetes modsec se han eliminado del repositorio de NGINX Plus y dejarán de estar disponibles en él.
Actualización de la clave PGP
Los paquetes de NGINX Open Source y NGINX Plus están firmados con una clave PGP. Esta clave caducará el 16 de junio de 2024. Hemos actualizado su fecha de caducidad para que los paquetes existentes puedan seguir verificándose después del 16 de junio de 2024. Generaremos nuevos pares de claves para firmar los paquetes de las próximas versiones.
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/nullEn RHEL/CentOS:
sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.keyNo podrá verificar las firmas de su software después del 16 de junio de 2024 hasta que actualice su clave.
Política futura de empaquetado y publicación
En futuras versiones de NGINX Plus, simplificaremos nuestra política de empaquetado y publicación. NGINX Plus se compilará y probará únicamente en las versiones más recientes de las distribuciones de sistemas operativos compatibles. Si instala NGINX Plus en distribuciones más antiguas, es posible que el gestor de paquetes le sugiera actualizar las bibliotecas y los paquetes de los que depende.
Cambios en la compatibilidad con plataformas
En esta versión se han realizado los siguientes cambios en las plataformas compatibles.
Nuevos sistemas operativos compatibles:
- Ubuntu 24.04
Sistemas operativos antiguos eliminados:
- FreeBSD 12, que llegó al final de su vida útil el 31 de diciembre de 2023
Sistemas operativos antiguos obsoletos y cuya eliminación está prevista 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 NGINX bajo carga
Anteriormente, NGINX cargaba un certificado, una clave o una lista de revocación de certificados cada vez que se hacía referencia a ellos en la configuración de NGINX. Esto implicaba que, si se hacía referencia varias veces al mismo objeto, este se volvía a cargar el mismo número de veces. Esta latencia se acumulaba al heredar directivas como las listas de certificados de confianza. En determinadas condiciones, este comportamiento afectaba considerablemente al tiempo de inicio de NGINX y podía requerir grandes cantidades de memoria para almacenar las configuraciones.
Con el nuevo comportamiento, las directivas SSL ahora hacen referencia a archivos de certificados almacenados en caché y a objetos relacionados. Como resultado, se reducen drásticamente el uso de memoria y los tiempos de carga de las configuraciones que hacen referencia repetidamente a los mismos objetos de certificado. La mejora resulta especialmente evidente en configuraciones de NGINX de gran tamaño en las que se hace referencia a un pequeño conjunto de certificados de confianza desde un gran número de bloques location.
A continuación se muestra una representación visual de la mejora del tiempo de carga cuando NGINX está configurado con aproximadamente 5400 bloques de ubicación (de nivel superior y anidados) y 878 certificados.

Observe la notable reducción de los tiempos de carga hacia el lado derecho del gráfico, donde el tiempo medio de carga pasa de aproximadamente 40 segundos antes del cambio a unos 6 segundos con el nuevo comportamiento.
Pasar conexiones del módulo Stream a otros módulos
NGINX Plus R32 incorpora una funcionalidad de NGINX open source 1.25.5 que añade un nuevo nivel de capacidad de configuración a NGINX. En concreto, el módulo stream de NGINX ahora puede funcionar como enrutador y actuar como proxy con la capacidad de transferir conexiones desde el contexto stream a otros contextos, como http o mail, o a un servidor virtual independiente dentro del propio contexto stream.
Esta funcionalidad está disponible como parte del módulo ngx_stream_pass_module, introducido en esta versión. El módulo cuenta con una única directiva, «pass», que permite especificar la dirección a la que se deben transferir las conexiones de los clientes. La dirección puede especificarse mediante una combinación de dirección IP y puerto, una ruta de socket o variables de NGINX.
Con esta funcionalidad, los clientes que deseen canalizar todo su tráfico a través de un único punto de conexión L4 ahora pueden finalizar las conexiones SSL en el contexto de flujo L4 y transferirlas a otros módulos (http, mail) o a otros servidores virtuales dentro del contexto de flujo. Además, las conexiones SSL pueden finalizarse de forma condicional en función de los nombres de servidor o los protocolos, mientras que el tráfico restante se redirige mediante proxy a otro destino. Esto abre un nuevo abanico de posibles opciones de configuración para gestionar el tráfico desde un único punto de conexión.
El siguiente fragmento de configuración finaliza las conexiones SSL en el módulo stream y, en función del nombre de servidor solicitado, las transfiere al contexto http o a otro servidor virtual del contexto stream.
http {
server {
listen 8000;
location / {
return 200 foo;
}
}
}
stream {
map $ssl_server_name $pass_port {
foo.example.com 8000;
default 9001;
}
server {
listen 9000 ssl;
ssl_certificate domain.crt;
ssl_certificate_key domain.key;
pass 127.0.0.1:$pass_port;
}
server{
listen 9001;
return bar\n;
}
}En este ejemplo, todas las conexiones SSL terminan en el bloque de servidor stream. En función del nombre del servidor indicado en la solicitud entrante, las conexiones se transfieren al servidor http que escucha en el puerto 8000 o al servidor virtual stream que escucha en el puerto 9001.
Otra aplicación del módulo aborda casos de uso en los que un módulo de terceros no admite la terminación SSL. En estos casos, el módulo stream_pass puede terminar las conexiones cifradas mediante TLS antes de pasarlas al módulo de terceros.
Este ejemplo muestra cómo el módulo RTMP, que no admite SSL de forma nativa, puede utilizar el módulo stream_pass para aceptar tráfico cifrado mediante TLS.
rtmp {
server {
listen 1935;#rtmp
application foo{
live on;
}
}
}
stream {
server {
listen 1936 ssl; #rtmps
ssl_certificate domain.crt;
ssl_certificate_key domain.key;
pass 127.0.0.1:1935;
}
}En este fragmento de configuración, la conexión SSL finaliza en el bloque de servidor stream y se transfiere a rtmp. La conexión se presenta sin cifrar al módulo RTMP, lo que elimina la necesidad de realizar personalizaciones adicionales o asumir una sobrecarga de procesamiento para admitir conexiones SSL.
Imágenes de contenedor de NGINX Plus
NGINX Plus R32 incluye la disponibilidad oficial de imágenes de contenedor de NGINX Plus para la ejecución de NGINX Plus tanto con privilegios como sin ellos. Ambos tipos de contenedor también están disponibles con instalaciones opcionales de NGINX Agent para facilitar la conexión con las plataformas de gestión compatibles con NGINX. Las imágenes se pueden descargar del registro de NGINX, disponible en: private-registry.nginx.com. Siga estas instrucciones para acceder a la imagen con su certificado y clave de NGINX Plus o con un token web JSON (JWT).
Otras mejoras y correcciones de errores en NGINX Plus R32
Corrección de errores en el módulo MQTT
- Paquetes con formato incorrecto al usar propiedades predeterminadas: Esta versión incluye una corrección para un problema que provocaba paquetes con formato incorrecto en el módulo Transporte de telemetría de colas de mensajes (MQTT), introducido en NGINX Plus R29. Anteriormente, cuando el campo de propiedades estaba presente y contenía valores predeterminados para todas las propiedades del mensaje MQTT Connect, la longitud del paquete saliente no tenía en cuenta el campo de longitud de las propiedades (1 byte). Esto hacía que la longitud del paquete fuera 1 byte menor de lo esperado y daba lugar a un paquete con formato incorrecto. Esta corrección de R32 resuelve el 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 la cola de pendientes utilizaban eslabones de cadena asignados desde un pool independiente que nunca se liberaba. Esto provocaba fugas de memoria tanto en el proceso maestro como en todos los procesos de trabajo. La corrección incluida en esta versión recupera una implementación anterior de la sincronización de zonas que utiliza un pool de ciclo para la cola de pendientes.
Correcciones de seguridad
Se identificaron y corrigieron los siguientes posibles problemas de seguridad en la implementación experimental de HTTP3/QUIC.
- Desbordamiento de memoria dinámica con escritura (CVE-2024-32760): Las instrucciones no divulgadas del codificador HTTP/3 pueden provocar la finalización de los procesos de trabajo de NGINX u otros posibles efectos.
- Desbordamiento de pila/uso después de liberar memoria (CVE-2024-31079): Las solicitudes HTTP/3 no divulgadas pueden provocar que los procesos de trabajo de NGINX finalicen o causar otros posibles efectos. Este ataque requiere que una solicitud se sincronice específicamente durante el proceso de cierre gradual de la conexión, sobre el cual el atacante no tiene visibilidad y apenas puede influir.
- Desreferencia de puntero nulo con una cabecera vacía (CVE-2024-35200): Las solicitudes HTTP/3 no divulgadas pueden provocar que los procesos de trabajo de NGINX finalicen o causar otros posibles efectos.
- 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 superior sin fragmentación, ciertos mensajes QUIC no divulgados pueden provocar la finalización de los procesos de trabajo de NGINX o la filtración de memoria liberada previamente.
Cambios heredados de NGINX Open Source
NGINX Plus R32 se basa en NGINX Open Source 1.25.5 y hereda los cambios funcionales, las funcionalidades y las correcciones de errores realizados desde el lanzamiento de NGINX Plus R31 (en NGINX 1.25.4 y 1.25.5).
Características:
- Servidores virtuales en el módulo stream.
- El módulo ngx_stream_pass_module.
- Los parámetros «deferred», «accept_filter» y «setfib» de la directiva «listen» del módulo stream.
- Detección del tamaño de la línea de caché para algunas arquitecturas.
- Compatibilidad con Homebrew en Apple Silicon.
Correcciones de errores:
- Correcciones de errores y mejoras en la compilación cruzada para Windows.
- Cierre inesperado de la conexión al usar 0-RTT en QUIC.
- Las conexiones con operaciones de AIO pendientes podrían cerrarse prematuramente durante el apagado ordenado de los procesos de trabajo antiguos.
- Las alertas de fuga de sockets ya no se registran cuando se solicita un cierre rápido después del cierre ordenado de los procesos de trabajo antiguos.
- Podría producirse un error de descriptor de socket, una fuga de sockets o un fallo de segmentación en un proceso de trabajo (para el proxy SSL) si se utilizaba AIO en una subsolicitud.
- Podría producirse un fallo de segmentación en un proceso de trabajo si se utilizaba el proxy SSL junto con la directiva "image_filter" y los errores con el código 415 se redirigían mediante la directiva "error_page".
- Correcciones de errores y mejoras en HTTP/3.
Seguridad:
- Al utilizar HTTP/3, podría producirse un fallo de segmentación en un proceso de trabajo al procesar una sesión QUIC especialmente diseñada (CVE-2024-24989, CVE-2024-24990).
Para consultar la lista completa de cambios, funciones, correcciones de errores y soluciones alternativas heredados de versiones recientes, consulte el archivo de cambios de NGINX.
Cambios en el módulo JavaScript de NGINX
NGINX Plus R32 incorpora cambios del módulo NGINX JavaScript (njs) versión 0.8.4. A continuación se enumeran los cambios más destacados de njs desde la versión 0.8.2 (que era la incluida con NGINX Plus R31).
Funcionalidades
- Funcionalidad: se puede configurar la cabecera Server de las respuestas salientes.
- Funcionalidad: compatibilidad con el motor QuickJS en la CLI.
Cambios
- Mejora: validación de los argumentos URI y args en r.subrequest().
- Mejora: comprobaciones de variables js_set duplicadas.
Correcciones de errores
- Corrección de errores: se ha corregido Headers.set().
- Corrección de errores: se ha corregido js_set con valores Buffer.
- Corrección de errores: se ha corregido 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 ha corregido la compilación con libxml2 2.12 y versiones posteriores.
- Corrección de errores: se ha corregido el constructor Date para los desbordamientos y los valores NaN.
- Corrección de errores: se ha corregido el desbordamiento negativo en querystring.parse().
- Corrección de errores: se ha corregido una posible lectura fuera de los límites del búfer en String.prototype.match().
- Corrección de errores: se ha corregido el análisis sintáctico de los bucles for-in.
- Corrección de errores: se ha corregido el análisis de literales hexadecimales, octales y binarios sin dígitos.
- Corrección de errores: se ha corregido el método clear() de un diccionario compartido sin tiempo de espera introducido en 0.8.3.
- Corrección de errores: se ha corregido el método r.send() de un diccionario compartido sin tiempo de espera al usar un argumento Buffer.
- Corrección de errores: se ha corregido atob() con cadenas base64 sin relleno.
Para consultar una lista completa de todas las funcionalidades, cambios y correcciones de errores, consulte el registro de cambios de njs.
Actualice o pruebe NGINX Plus
Si utiliza NGINX Plus, le recomendamos encarecidamente que actualice a NGINX Plus R32 lo antes posible. Además de todas las fantásticas funciones nuevas, también obtendrá varias correcciones y mejoras adicionales, lo que facilitará que NGINX pueda ayudarle si necesita abrir una incidencia de soporte.
Si aún no utiliza NGINX Plus, le animamos a probarlo. Puede usarlo para casos de uso de seguridad, balanceo de carga y puerta de enlace de API, o como servidor web con soporte completo, supervisión mejorada y API de gestión. Empiece hoy mismo con una prueba gratuita de 30 días.
Sobre el autor
Artículos relacionados del blog
Únete a F5 NGINX en AppWorld 2024
Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.
Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.
Exposición de APIs en Kubernetes
La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».
NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.
Presentamos NGINX Plus R22
NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.
Presentamos NGINX Plus R17
NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.