Nos complace anunciar la disponibilidad de NGINX Plus Release 31 (R31). 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 R31 incluyen:
Para completar el lanzamiento se incluyen nuevas características y correcciones de errores heredadas de NGINX Open Source y actualizaciones del módulo JavaScript de NGINX.
Nota: Si está actualizando desde una versión distinta a NGINX Plus R30, 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.
El módulo OpenTracing que se introdujo en NGINX Plus R18 ahora está obsoleto. Está marcado para eliminarse a partir de la futura versión de NGINX Plus R34. El paquete estará disponible con todas las versiones de NGINX Plus hasta entonces. Se recomienda encarecidamente utilizar el módulo OpenTelemetry que se introdujo en NGINX Plus R29.
Los usuarios de NGINX Plus deben informar su uso de NGINX a F5 para fines de cumplimiento. Con el lanzamiento de NGINX Plus R31, la capacidad de informar su uso de NGINX a NGINX Instance Manager está presente de forma nativa y está habilitada de forma predeterminada. Se registra un mensaje de advertencia si la instancia NGINX no puede proporcionar su información de uso al Administrador de instancias NGINX por algún motivo.
Consulte la sección Informes de uso nativo de NGINX para obtener detalles sobre cómo configurar esta función en su entorno.
Nuevos sistemas operativos compatibles:
Sistemas operativos más antiguos eliminados:
Sistemas operativos antiguos obsoletos y programados para su eliminación en NGINX Plus R32:
NGINX Plus R31 presenta comunicación nativa con NGINX Instance Manager en su red para automatizar el cumplimiento de las licencias. Si participa en el Programa de Consumo Flexible de F5 , ya no necesitará realizar un seguimiento manual de sus instancias NGINX Plus.
De forma predeterminada, NGINX Plus intentará descubrir NGINX Instance Manager al iniciarse a través de una búsqueda DNS del nombre de host nginx-mgmt.local
. Si bien el nombre de host es configurable, sugerimos (para simplificar) agregar un registro A a su DNS local, asociando el nombre de host predeterminado con la dirección IP del sistema que ejecuta NGINX Instance Manager. Luego, NGINX Plus establecerá una conexión TLS con NGINX Instance Manager e informará su número de versión, nombre de host e identificador único cada treinta minutos.
Para una capa adicional de seguridad, también sugerimos aprovisionar esta conexión con mTLS mediante el uso del bloque de configuración mgmt
opcional. Luego, a una cadencia regular, NGINX Instance Manager informará el uso total de instancias NGINX Plus a un servicio F5.
Verá un mensaje de advertencia en su registro de errores si NGINX Plus experimenta algún problema al resolver el nombre de host nginx-mgmt.local
o al comunicarse con el Administrador de instancias de NGINX.
Este es un ejemplo de un mensaje de error que indica que la instancia de NGINX Plus no puede resolver nginx-mgmt.local
:
2023/12/21 21:02:01 [warn] 3050#3050: Informe de uso: No se encontró el host que resuelve el punto final "nginx-mgmt.local”
A continuación se muestra un ejemplo de un mensaje de error que indica que la instancia NGINX Plus está experimentando dificultades para comunicarse con el Administrador de instancias NGINX:
2023/12/21 21:02:01 [warn] 3184#3184: informe de uso: se agotó el tiempo de conexión
administración
Si prefiere ajustar la forma en que su instancia NGINX Plus se comunica con NGINX Instance Manager, puede optar por utilizar el nuevo bloque de configuración mgmt
y las directivas asociadas. Al hacerlo, podrá definir un solucionador personalizado, usar una dirección IP o un nombre de host alternativo para identificar su sistema NGINX Instance Manager, especificar opciones de TLS, usar mTLS para mayor seguridad y especificar otros parámetros personalizados.
La siguiente es una configuración personalizada de ejemplo:
mgmt {
use_report endpoint=instance-manager.local interval=30m;
resolver 192.168.0.2; # Ejemplo de IP DNS interna
uuid_file /var/lib/nginx/nginx.id;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers DEFAULT;
ssl_certificate client.pem;
ssl_certificate_key client.key;
ssl_trusted_certificate trusted_ca_cert.crt;
ssl_verify on;
ssl_verify_depth 2;
}
Para obtener detalles adicionales sobre estas directivas, consulte la documentación del producto .
Para obtener más información sobre cómo descargar e instalar NGINX Instance Manager, consulte la guía de instalación .
Nota: Si está utilizando una versión anterior de NGINX Plus, aún puede informar sus instancias siguiendo estas instrucciones .
Antes de este lanzamiento, NGINX Plus asumía que todos los servidores de un grupo ascendente eran idénticos. Esto significa que necesitaban poder responder las mismas solicitudes, responder al mismo nombre SNI (cuando se usa proxy_ssl_server_name
) y devolver certificados SSL que coincidieran con el mismo nombre.
Sin embargo, existen escenarios en los que este comportamiento no es suficiente. Por ejemplo, si se comparten varios servidores virtuales detrás de un servidor ascendente y es necesario distinguirlos mediante un SNI y/o encabezado de host diferente para enrutar solicitudes a recursos específicos. También es posible que no se pueda usar el mismo certificado en todos los servidores del grupo ascendente o que existan limitaciones para colocar los servidores ascendentes en grupos ascendentes separados.
NGINX Plus R31 introduce soporte para que SNI se configure por servidor ascendente. La variable $upstream_last_server_name
hace referencia al nombre del servidor ascendente seleccionado, que luego puede pasarse al servidor proxy mediante las directivas proxy_ssl_server_name
y proxy_ssl_name
.
Aquí se explica cómo configurar proxy_ssl_server_name
en activado , lo que permite que un nombre de servidor pase a través de SNI:
nombre_del_servidor_ssl_proxy activado;
Y así es como se pasa el nombre del servidor ascendente seleccionado usando proxy_ssl_name
:
proxy_ssl_name
$nombre_del_último_servidor_upstream;
NGINX JavaScript v0.8.1 introdujo una nueva directiva js_periodic
que está disponible tanto en el contexto http
como en el de streaming
. Esta directiva permite especificar un controlador de contenido JavaScript para que se ejecute a intervalos regulares. Esto es útil en casos donde el código personalizado necesita ejecutarse a intervalos periódicos y podría requerir acceso a variables NGINX. El controlador de contenido recibe un objeto de sesión como argumento y también tiene acceso a objetos globales.
De forma predeterminada, el controlador de contenido se ejecuta en el proceso de trabajo 0, pero se puede configurar para que se ejecute en procesos de trabajo específicos o en todos ellos.
Esta directiva está disponible en el contexto de ubicación
:
ejemplo.conf:
ubicación @periodics {
# Se ejecutará a intervalos de 15 minutos en los procesos de trabajo 1 y 3
js_periodic main.handler interval=900sworker_affinity=0101;
resolver 10.0.0.1;
js_fetch_trusted_certificate /path/to/certificate.pem;
}
ejemplo.js:
función asíncrona handler(s) {
let reply = await ngx.fetch('https://nginx.org/en/docs/njs/');
let body = await reply.text();
ngx.log(ngx.INFO, body);
}
Para conocer los detalles de sintaxis y configuración, consulte la documentación de JavaScript de NGINX .
En escenarios donde una configuración de NGINX contiene una gran cantidad de “ubicaciones”, el tiempo de inicio de NGINX puede demorar una cantidad de tiempo considerable. En muchos casos, esto podría no ser aceptable. El problema de raíz existe en el algoritmo de clasificación que se utiliza para ordenar la lista de ubicaciones.
NGINX R31 presenta una mejora que reemplaza el algoritmo de ordenamiento existente, el de ordenamiento por inserción , que tiene una complejidad temporal de O(n2)
, con el de ordenamiento por fusión, que tiene una complejidad temporal de O(n*log n)
.
En una configuración de prueba con 20.000 ubicaciones, se observó que el tiempo total de inicio se redujo de 8 segundos a 0,9 segundos después de esta actualización.
NGINX Plus R31 introduce varias mejoras y optimizaciones de rendimiento para la implementación de QUIC+HTTP/3, como:
Las optimizaciones de rendimiento adicionales incluyen la reducción de posibles demoras al enviar paquetes de reconocimiento, colocar los marcos de reconocimiento (ACK) al frente de la cola para reducir las retransmisiones de marcos y las demoras en la entrega de marcos ACK, y mejoras en el comportamiento de control de congestión en el modo de descarga de segmentación genérica (GSO).
de gestión
adicionalEn NGINX Plus R31, ngx_mgmt_module
le permite informar información de uso de NGINX al Administrador de instancias de NGINX. Esta información incluye el nombre de host NGINX, la versión de NGINX y un identificador de instancia único.
El módulo proporciona varias directivas para ajustar la forma en que su instancia NGINX se comunica con el Administrador de instancias NGINX. Para obtener una lista completa de las directivas y opciones de configuración disponibles, consulte la documentación de NGINX .
La compatibilidad con Message Queueing Telemetry Transport (MQTT) se introdujo en NGINX Plus R29 y esta versión contiene algunas correcciones de errores observados en el módulo MQTT.
Una solución importante aborda un problema por el cual los mensajes CONNECT eran rechazados cuando no se proporcionaba una contraseña. Anteriormente, esperábamos incondicionalmente que el campo de nombre de usuario fuera seguido por la contraseña. Sin embargo, existen casos especiales en la especificación MQTT (como la autenticación anónima) en los que no es obligatorio proporcionar una contraseña. La solución verifica condicionalmente si se espera la contraseña o no mirando el campo cflags
del paquete. Si la bandera no está establecida, implica que la contraseña no es obligatoria.
Otra corrección de errores detiene el análisis de los mensajes MQTT CONNECT cuando la longitud del mensaje es menor que la cantidad de bytes recibidos.
con tokens de servidor
HTTP/3 con variablesNGINX Plus R31 agrega soporte para variables server_tokens
faltantes para conexiones HTTP/3. El campo de cadena
se puede utilizar para establecer explícitamente la firma en las páginas de error y el valor del campo de encabezado de respuesta “Servidor”. Si el campo de cadena está vacío, deshabilita la emisión del campo “Servidor”.
NGINX Plus R31 se basa en NGINX Open Source 1.25.3 y hereda cambios funcionales, características y correcciones de errores realizados desde que se lanzó NGINX Plus R30 (en NGINX 1.25.2 y 1.25.3).
TLS_AES_128_CCM_SHA256
al usar HTTP/3 : esta mejora agrega compatibilidad con TLS_AES_128_CCM_SHA256
a QUIC, que actualmente es el único conjunto de cifrado no compatible con la implementación de QUIC de NGINX. Está deshabilitado de forma predeterminada en OpenSSL y se puede habilitar con esta directiva: ssl_conf_command Ciphersuites TLS_AES_128_CCM_SHA256;
nginx
al cargar configuraciones de OpenSSL : al usar la interfaz OPENSSL_init_ssl()
, en lugar de verificar OPENSSL_VERSION_NUMBER
, NGINX ahora prueba que OPENSSL_INIT_LOAD_CONFIG
esté definido y sea verdadero. Esto garantiza que la interfaz no se utilice con BoringSSL y LibreSSL, ya que no proporcionan configuraciones de inicialización de biblioteca adicionales (en particular, la llamada OPENSSL_INIT_set_config_appname()
).O(n*log n)
. Esto crea una mejor experiencia de inicio de NGINX , especialmente cuando hay una cantidad muy elevada de “ubicaciones” en la configuración.http2_max_concurrent_streams
. Se aplica incluso si nunca se alcanza el umbral máximo de transmisiones simultáneas permitidas para tener en cuenta los casos en que las transmisiones se restablecen inmediatamente después de enviar las solicitudes.client_header_buffer_size
que no tiene reserva de estado. Esto provocó un problema por el cual el búfer podía sobreleerse al guardar el estado. La solución actual permite leer solo el tamaño de búfer disponible en lugar del tamaño de búfer fijo. Este error apareció por primera vez en la versión principal de NGINX 1.25.1 (NGINX Plus R30).Estado: 404
era válido según la especificación de la Interfaz de puerta de enlace común (CGI), pero perdió el espacio final durante el análisis. Esto generó una línea de estado HTTP/1.1 404
en la respuesta, lo que viola la especificación HTTP debido a un espacio final faltante. Con esta corrección de errores, solo se usa el código de estado de esas líneas de encabezado de estado cortas, por lo que NGINX generará la línea de estado por sí misma con el espacio y la frase de motivo apropiada si está disponible.Para obtener la lista completa de nuevos cambios, características, correcciones de errores y soluciones alternativas heredadas de versiones recientes, consulte el archivo CAMBIOS DE NGINX.
NGINX Plus R31 incorpora cambios de la versión 0.8.2 del módulo NGINX JavaScript (njs). Aquí está la lista de cambios notables en njs desde 0.8.0 (que fue parte del lanzamiento de NGINX Plus R30).
error()
, info()
, log()
, time()
, timeEnd()
y warn()
.js_periodic
para http
y stream
que permite especificar un controlador JS para ejecutar a intervalos regulares.items()
de un diccionario compartido . Este método devuelve todos los pares clave-valor no vencidos.existsSync()
.parse()
.RegExp.prototype.exec()
con expresión regular global (regexp) y entrada Unicode.de tamaño fijo()
y claves()
de un diccionario compartido .r.internalRedirect()
que se introdujo en 0.8.0.Object.getOwnPropertyNames()
.items()
fijo para un diccionario compartido.Para obtener una lista completa de todas las características, cambios y correcciones de errores, consulte el registro de cambios de njs.
Si está utilizando NGINX Plus, le recomendamos encarecidamente que actualice a NGINX Plus R31 lo antes posible. Además de todas las nuevas y excelentes funciones, también obtendrá varias correcciones y mejoras adicionales, y estar actualizado ayudará a NGINX a ayudarlo si necesita generar un ticket de soporte.
Si aún no has probado NGINX Plus, te recomendamos que lo hagas. 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.