BLOG | NGINX

Anunciamos NGINX Plus R30

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Prabhat Dixit
Prabhat Dixit
Publicado el 15 de agosto de 2023

Nos complace anunciar la disponibilidad de NGINX Plus Release 30 (R30). 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 R30 incluyen:

  • Soporte nativo para QUIC+HTTP/3 NGINX Plus ahora tiene soporte oficial para HTTP/3. La implementación no depende de bibliotecas de terceros para proporcionar la funcionalidad TLS OpenSSL faltante necesaria para brindar compatibilidad con HTTP/3 a través del protocolo QUIC. Utiliza una capa de compatibilidad OpenSSL desarrollada por el equipo NGINX para evitar los desafíos con las interfaces QUIC TLS que no son compatibles con OpenSSL.
  • Telemetría de conexión por trabajador : ahora se admite la supervisión de conexiones a nivel de cada trabajador. Esto permite a los usuarios ajustar el rendimiento de NGINX regulando la cantidad de procesos de trabajo y distribuyendo eficazmente las conexiones entre los trabajadores para lograr un rendimiento óptimo.
  • Paquete de diagnóstico : el paquete de diagnóstico NGINX recopila todos los datos necesarios para solucionar problemas en un solo archivo comprimido. Esto mejora la comunicación entre los usuarios de NGINX Plus y el soporte de F5, aumentando la eficiencia y reduciendo el tiempo de respuesta para la resolución de problemas.

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.

Cambios importantes en el comportamiento

Nota : Si está actualizando desde una versión distinta a NGINX Plus R29, 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 de la directiva listen…http2

La directiva listen… http2 ha quedado obsoleta en NGINX 1.25.1. La comprobación de configuración de NGINX mediante nginx -t arroja una advertencia a tal efecto.  

nginx -t

nginx: [advertencia] La directiva "listen ... http2" está obsoleta; utilice la directiva "http2" en su lugar en etc/nginx/nginx.conf :15

nginx: La sintaxis del archivo de configuración /etc/nginx/nginx.conf es correcta.

nginx: La prueba del archivo de configuración /etc/nginx/nginx.conf se realizó correctamente.

Se recomienda encarecidamente a todos los usuarios existentes de esta directiva que actualicen NGINX y utilicen la directiva http2, que habilita HTTP/2 por servidor.

Cambia esto:

escuchar 443 ssl http2;

A esto:

escuchar 443 ssl; http2 activado;

No disponibilidad del módulo GeoIP2 en Amazon Linux 2

Las versiones anteriores de NGINX Plus utilizaban la biblioteca “libmaxminddb” del repositorio EPEL de Amazon Linux 2 para crear el módulo GeoIP2 . El repositorio EPEL ya no proporciona esta biblioteca, ni es accesible de forma nativa desde la distribución Amazon Linux 2. Por lo tanto, el módulo ya no está disponible en NGINX Plus R30 ya que no hay una forma viable de construirlo para Amazon Linux 2.

Cambios en las directivas MQTT

La directiva mqtt_rewrite_buffer_size , que se utiliza para especificar el tamaño del búfer para construir mensajes MQTT, ha sido reemplazada por la directiva mqtt_buffers . La nueva directiva permite especificar la cantidad de buffers que se pueden asignar por conexión, además de especificar el tamaño de cada buffer.

Versión API actualizada

El número de versión de la API NGINX Plus se ha actualizado de 8 a 9 para reflejar la incorporación de las métricas por trabajador descritas en Telemetría de conexión por trabajador . Los números de versiones anteriores aún funcionan, pero la salida no incluye las métricas agregadas en versiones de API posteriores.

Cambios en el soporte de la plataforma

Nuevos sistemas operativos compatibles:

  • Debian 12
  • Alpino 3.18

Sistemas operativos más antiguos eliminados:

  • Alpine 3.14, que llegó al final de su vida útil (EOL) el 1 de mayo de 2023
  • Ubuntu 18.04, que alcanzó el fin de su vida útil el 26 de abril de 2023

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

  • Alpine 3.15, que llegará al final de su vida útil en noviembre de 2023

Nuevas funciones en detalle

Soporte nativo para QUIC+HTTP/3

HTTP/3 sobre QUIC ha sido una característica muy esperada solicitada por muchos de nuestros clientes empresariales, y estamos encantados de presentarla oficialmente en NGINX Plus R30. Esta es una nueva tecnología e implementación en la que continuaremos centrándonos en futuras versiones. Recomendamos a los usuarios de NGINX Plus que primero lo prueben en un entorno que no sea de producción y compartan con nosotros cualquier comentario valioso.

NGINX Plus se basa en OpenSSL para la comunicación segura y la funcionalidad criptográfica, haciendo uso de las bibliotecas SSL/TLS que vienen con los sistemas operativos. Sin embargo, debido a que las interfaces TLS de QUIC no son compatibles con OpenSSL en el momento de este lanzamiento, se necesitan bibliotecas de terceros para proporcionar la funcionalidad TLS faltante requerida por HTTP/3.

Para abordar esta inquietud, el equipo de NGINX desarrolló una capa de compatibilidad OpenSSL , eliminando la necesidad de crear y enviar bibliotecas TLS de terceros como quictls, BoringSSL y LibreSSL. Esto ayuda a administrar la experiencia QUIC+HTTP/3 de extremo a extremo en NGINX sin la carga de una implementación TLS personalizada ni la dependencia de cronogramas y hojas de ruta de bibliotecas de terceros. Planeamos mejorar la capa de compatibilidad de OpenSSL en futuras versiones con más características y opciones, como soporte para 0-RTT.

Aquí está la configuración de QUIC+HTTP/3:
   

http {
        formato_registro quic '$dirección_remota - $usuario_remoto [$tiempo_local] '
                         '"$solicitud" $estado $bytes_del_cuerpo_enviados '
                        '"$http_referer" "$http_user_agent" "$http3"';
        registro_acceso logs/access.log quic;

       servidor {
            # para una mejor compatibilidad se recomienda
            # usar el mismo puerto para quic y https
            listen 8443 quic reuseport;
            listen 8443 ssl;

            ssl_certificate     certs/example.com.crt;
            ssl_certificate_key certs/example.com.key;

            ubicación / {
                # necesario para que los navegadores los dirijan al puerto rápido
                add_header Alt-Svc 'h3=":8443"; ma=86400';
            }
        }
    }

El soporte QUIC+HTTP/3 en NGINX Plus R30 está disponible como un binario único, a diferencia del soporte HTTP/3 experimental introducido en NGINX Plus R29 , que tenía un binario separado para nginx quic. Esta mejora facilita la implementación de la funcionalidad en su entorno.

Nota: Con NGINX Plus R30, finalizamos el soporte y las actualizaciones para el binario independiente QUIC y planeamos eliminarlo como opción de descarga a finales de este año.

Telemetría de conexión por trabajador

Los usuarios de NGINX Plus ahora pueden monitorear la cantidad total de conexiones por proceso de trabajo para ajustar adecuadamente la directivaworker_connections . Esta mejora brinda a los usuarios una mejor visibilidad de cómo se distribuyen las conexiones entre los trabajadores. Poder ajustar las conexiones de los trabajadores también le ayudará a evaluar mejor su implementación de NGINX.

Las métricas de conexión por trabajador están disponibles a través de la API REST. Para obtenerlas, utilice el punto de conexión …/api/9/workers .

Para recuperar métricas de conexión por trabajador para un trabajador individual, utilice el punto final .../api/9/workers/< worker id > . El ID del trabajador tiene un índice basado en 0.

A continuación se muestra un ejemplo de respuesta:

{
      {
          "identificación": 0,
        "pid": 2346,
        "conexiones": {
            "aceptadas": 1,
            "abandonado": 0,
            "activo": 1,
            "inactivo": 0
},
"http": {
"solicitudes": {
"total": 15,
                "actual": 1
}
}
},
},
},
},
},
},
}, 1,
        "pid": 1234,
        "conexiones": {
            "aceptadas": 3,
            "abandonado": 0,
            "activo": 1,
            "inactivo": 0
},
"http": {
"solicitudes": {
"total": 15,
                "actual": 1
              }
          }
      },

      ...

  }

Las métricas de conexión por trabajador están disponibles en el Panel de monitoreo de actividad en vivo de NGINX Plus , como se muestra a continuación. Acceda a una demostración en vivo de esta función en demo.nginx.com.

Panel de monitoreo de actividad en vivo de NGINX Plus que muestra la siguiente información sobre las conexiones y solicitudes de NGINX Plus

El panel muestra la siguiente información sobre las conexiones y solicitudes de NGINX Plus.

Conexiones:

  • Conexiones aceptadas por trabajador
  • Conexiones activas por trabajador
  • Conexiones inactivas por trabajador
  • Conexiones interrumpidas por trabajador

Solicitudes:

  • Solicitudes actuales por trabajador
  • Total de solicitudes por trabajador
  • Solicitudes/seg por trabajador

Paquete de diagnóstico

Para reducir el tiempo de respuesta para la resolución de problemas, el paquete de diagnóstico agiliza el proceso de recopilación de los datos necesarios para solucionar problemas en su entorno NGINX. El paquete de diagnóstico también ayuda a evitar discrepancias y demoras asociadas con la solicitud y recopilación manual de información necesaria para solucionar problemas, lo que hace que la interacción entre los clientes de NGINX Plus y el soporte de F5 sea más eficiente.

El paquete de diagnóstico recoge:

  • Información de NGINX : versión de NGINX Plus, configuraciones, información del proceso, módulos de terceros, registros, estadísticas de API y puntos finales
  • Información del sistema : comandos del host ( ps , lsof , vmstat , etc.)
  • Información de serviciosystemd , etc.
  • Agente NGINX : registros y configuraciones (si están presentes)
  • NGINX App Protect : registros y configuraciones (si están presentes)
  • Registro de paquetes de soporte : registro que contiene una lista de todos los archivos recopilados

Nuestro objetivo con la incorporación del paquete de diagnóstico es ser transparentes con los usuarios sobre qué comandos ejecuta el script dentro del paquete y qué datos se recopilan. Consulte la página del paquete de diagnóstico NGINX Plus para obtener más información.

Nota: La disponibilidad del paquete de diagnóstico se anuncia como parte de la versión actual de NGINX Plus R30, sin embargo, el paquete de diagnóstico en realidad no depende de la versión. En el futuro, planeamos actualizarlo en función de sus comentarios y del soporte de F5 con la intención de mejorar el proceso de recopilación de datos para la resolución de problemas.

Otras mejoras en NGINX Plus R30

Optimizaciones MQTT

Gracias a las mejoras en el consumo de memoria realizadas en el módulo de filtro de transporte de telemetría de cola de mensajes (MQTT), ahora hay un aumento de 4 a 5 veces en el rendimiento.

Se ha eliminado la directiva mqtt_rewrite_buffer_size . En cambio, la nueva directiva mqtt_buffers <núm> <tamaño> Se ha introducido para especificar cuántos buffers puede asignar el módulo por conexión, junto con el tamaño de cada buffer. El número predeterminado de buffers es 100 y el tamaño predeterminado de cada buffer es 1024 bytes, lo que hace que el valor predeterminado de la variable mqtt_buffers sea <100> <1024> .

Optimizaciones de recarga de DNS

NGINX Plus ahora conserva los tiempos de expiración de los nombres DNS para los hosts ascendentes resueltos dinámicamente en las recargas, lo que elimina la necesidad de una nueva resolución al recargar la configuración. Antes de esta actualización, las resoluciones de DNS se activaban para todos los upstream. Con esta actualización, NGINX conserva las resoluciones de DNS y los tiempos de expiración para todos los upstreams y activa resoluciones de DNS solo para upstreams nuevos o modificados durante la recarga.

Esta optimización tendrá mayor impacto en entornos NGINX que contengan una gran cantidad de hosts ascendentes. Si tiene 100 o más hosts ascendentes en su configuración NGINX, las optimizaciones serán más evidentes.

Cambios heredados de NGINX de código abierto

NGINX Plus R30 se basa en NGINX Open Source 1.25.1 y hereda cambios funcionales, características y correcciones de errores realizados desde que se lanzó NGINX Plus R29 (en NGINX 1.25.0 y 1.25.1).

Cambios

  • Se ha eliminado la compatibilidad con el servidor HTTP/2. El servidor HTTP/2 server_push tuvo una adopción mínima y solo podía usarse en casos de uso muy limitados. (Según la documentación de referencia IETF 102, se utilizó en solo el 0,04 % de las sesiones. Según RFC 913, "era difícil de usar de manera efectiva"). El envío de servidores HTTP/2 se deshabilitó en la versión 106 de Chrome . Como parte de este cambio, las directivas http2_push , http2_push_preload y http2_max_concurrent_pushes quedaron obsoletas.
  • La directiva ssl obsoleta ya no es compatible. La directiva ssl quedó obsoleta en NGINX 1.15.0 y fue reemplazada por el parámetro ssl de la directiva listen. La directiva ssl obsoleta ahora ha sido eliminada.
  • Como se mencionó anteriormente, la directiva listen… http2 está obsoleta. Se recomienda a los usuarios utilizar la directiva http2 en su lugar.
    • Para conexiones SSL con OpenSSL v1.0.2h o superior, si el protocolo HTTP/2 está habilitado en el servidor virtual elegido por una Identificación de nombre de servidor (SNI), se selecciona automáticamente mediante la devolución de llamada de Negociación de protocolo de capa de aplicação (ALPN).
    • Para versiones anteriores de OpenSSL, el protocolo HTTP/2 está habilitado según la configuración predeterminada del servidor virtual .
    • Para conexiones TCP simples, HTTP/2 ahora es detectado automáticamente por el prefacio HTTP/2 si está habilitado en el servidor virtual predeterminado. Si el prefacio no coincide, se asume HTTP/0.9-1.1.
  • Se agrega soporte para HTTP/2 sobre Cleartext TCP (h2c) y HTTP/1.1 en el mismo socket de escucha. En la implementación existente, si un usuario configura un socket de escucha h2c (por ejemplo, listen port_num http2 ) solo se pueden crear conexiones HTTP/2. Un socket de escucha h2 admite HTTP/1.1 y HTTP/2 con negociación de protocolo a través de ALPN. Sin embargo, en la implementación existente, los clientes HTTP/1.1 fallan en el socket, lo que impide el uso de HTTP Upgrade como un medio para negociar el protocolo. Este cambio permite el soporte simultáneo de HTTP/1.1 y HTTP/2 en un socket TCP simple cuando se utiliza HTTP/2.
  • Se ha habilitado la posibilidad de evitar un posible desbordamiento del búfer con algunos $sent_http_* . Un defecto en la lógica para evaluar las variables $sent_http_ de múltiples encabezados provocó posibles desbordamientos del búfer cuando se borraron ciertos elementos pero permanecieron en la lista vinculada. Este problema se manifestó cuando se utilizaron módulos de terceros para anular los valores de múltiples encabezados. La actualización introduce controles de límites refinados, lo que garantiza un manejo y una evaluación más seguros de estas variables.

Características

  • Se agregó soporte completo para HTTP/3. La versión principal de NGINX 1.25.0 introdujo soporte para HTTP/3, y este soporte se ha fusionado en NGINX Plus R30. La implementación de NGINX Plus R30 tiene los siguientes cambios en comparación con los paquetes experimentales entregados en NGINX Plus R29:
  •  
    • Se eliminó la directiva quic_mtu
    • Se eliminó el parámetro http3 de la directiva listen
    • Se eliminó la compatibilidad con QUIC del módulo de transmisión
    • Se eliminó el envío del servidor HTTP/3
    • Se corrigió la creación de la capa de compatibilidad de OpenSSL con OpenSSL 3.2+

Corrección de errores

  • Se solucionó el problema de segmentación que se producía si una expresión regular (regex) estudiaba la asignación de lista.

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.

Cambios en el módulo JavaScript de NGINX

NGINX Plus R30 incorpora cambios de la versión 0.8.0 del módulo NGINX JavaScript (njs).

Características

  • Se presentaron las siguientes propiedades globales de NGINX:
    ngx.build , ngx.conf_file_path , ngx.error_log_path , ngx.prefix , ngx.version , ngx.version_number y ngx.worker_id .
  • Se introdujo la directiva js_shared_dict_zone para http y stream que permite declarar un diccionario compartido entre procesos de trabajo.
  • Se agregaron métodos de matriz compatibles con ES13: Matriz.from(), Matriz.prototipo.toSorted(), Matriz.prototipo.toSpliced(), Matriz.prototipo.toReversed() .
  • Se agregaron métodos TypedArray compatibles con ES13: %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed() .
  • Se añadieron las propiedades CryptoKey a la API de WebCrypto . Se añadieron las siguientes propiedades: algoritmo, extraíble, tipo y usos .

Cambios

  • Se eliminó el tratamiento especial de los encabezados prohibidos en la API Fetch introducida en0.7.10 .
  • Se eliminó r.requestBody() del módulo http, que quedó obsoleto en la versión 0.5.0. En su lugar se debe utilizar la propiedad r.requestBuffer o r.requestText .
  • Se eliminó r.responseBody() del módulo http que quedó obsoleto en la versión 0.5.0. En su lugar se debe utilizar la propiedad r.responseBuffer o r.responseText .
  • Se lanza una excepción en r.internalRedirect() mientras se filtra en el módulo http .
  • Los métodos nativos se proporcionan con el argumento retval . Este cambio rompe la compatibilidad con la extensión C para njs requiriendo la modificación del código.
  • Se eliminaron los métodos String obsoletos que no cumplían con las normas. Se eliminaron los siguientes métodos: Cadena.bytesFrom(), Cadena.prototype.fromBytes(), Cadena.prototype.fromUTF8(), Cadena.prototype.toBytes(), Cadena.prototype.toUTF8(), Cadena.prototype.toString(codificación) .
  • Se eliminó el soporte para compilar con GNU readline.

Corrección de errores

  • Se arregló el establecedor r.status al filtrar en el módulo http .
  • Configuración fija del encabezado de ubicación en el módulo http .
  • Se corrigió la recuperación de crypto.getRandomValues() .
  • Se corrigió la evaluación de nombres de propiedades calculadas con expresiones de función.
  • Nombre implícito fijo para una expresión de función declarada en matrices.
  • Análisis fijo de bucles for-in.
  • Se corrigió Date.parse() con formato ISO-8601 y diferencia horaria UTC.

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 R30 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.