BLOG | NGINX

Anunciamos NGINX Plus R21

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Liam Crilly
Liam Crilly
Publicado el 7 de abril de 2020

Nos complace anunciar que NGINX Plus Release 21 (R21) ya está disponible. Basado en NGINX de código abierto, NGINX Plus es el único equilibrador de carga, caché de contenido, servidor web y puerta de enlace API todo en uno . Con más de 450 millones de sitios web que dependen de NGINX , NGINX Plus R21 es más confiable y más seguro que nunca, centrándose principalmente en la corrección de errores y las mejoras de estabilidad de NGINX Open Source.

Las nuevas características de NGINX Plus R21 incluyen:

  • Proxy gRPC dinámico : hemos agregado soporte variable al pasar conexiones gRPC a servicios gRPC de backend. Esto le permite enrutar dinámicamente conexiones gRPC a grupos de servicios en función de los atributos del cliente.
  • Mejoras del módulo JavaScript de NGINX : el módulo JavaScript de NGINX (njs) se ha actualizado a la versión 0.3.9, con varias correcciones de errores y mejoras funcionales adicionales relacionadas con las subsolicitudes y la compatibilidad con el sistema de archivos.

Cambios importantes en el comportamiento

  • Solicitudes aceptables : de acuerdo con RFC 7230 , NGINX Plus ya no permite solicitudes de clientes con múltiples encabezados de host .
  • Nuevos sistemas operativos compatibles : Alpine Linux 3.11.
  • Sistemas operativos más antiguos ya no son compatibles : plataformas de 32 bits (arquitecturas i386).

Invertir en calidad

El software eficiente y la calidad del código son principios centrales de cómo construimos NGINX, tanto de código abierto como NGINX Plus.

El equipo de NGINX emplea todas las herramientas de CI/CD y pruebas automatizadas modernas que espera de cualquier software comercial. Las pruebas diarias de la rama de desarrollo activa muestran una “densidad de defectos” notablemente baja de solo 0,01 defectos por cada 1000 líneas de código, en comparación con una densidad promedio de 0,7 defectos por cada 1000 líneas para bases de código de tamaño similar.

También encargamos pruebas de penetración externas e independientes y revisiones de código tanto para componentes de código abierto como para NGINX Plus. Las más recientes pruebas de penetración y revisiones de código identificaron varios problemas que se abordan en esta versión.

Corrección de errores

En total, NGINX Plus R21 incluye correcciones para 14 errores:

  • Fuga de sockets al usar HTTP/2 (dos errores separados)
  • Fuga de sockets al usar subsolicitudes en el módulo njs y la directiva aio
  • Posible agotamiento de memoria en el módulo WebDav
  • Divulgación potencial de memoria en el módulo MP4
  • Código de estado494 fue devuelto en lugar de400 cuando hay errores con el código494 fueron redirigidos con la directiva error_page
  • Se puede producir un tiempo de espera al manejar solicitudes canalizadas en una conexión SSL
  • Podría ocurrir una falla de segmentación en un proceso de trabajo si se utilizó el grapado OCSP
  • Puede ocurrir una falla de segmentación al inicio o durante la reconfiguración si la configuración incluía la directiva de reescritura con una cadena de reemplazo vacía
  • Podría producirse una falla de segmentación en un proceso de trabajo si se utilizó la directiva break junto con la directiva alias , o junto con la directiva proxy_pass con un URI.
  • Solo se procesó el primer encabezado de solicitud Transfer-Encoding
  • La línea del encabezado de respuesta de ubicación podría contener basura si el URI de la solicitud se reescribió a uno que contenga un carácter nulo
  • Las solicitudes con cuerpos se manejaron incorrectamente al devolver redirecciones con la directiva error_page
  • Error en la directiva debug_points al utilizar HTTP/2

Tenga en cuenta que ninguno de estos errores fue crítico y no hay registros CVE asociados.

Invertir en la hoja de ruta de NGINX Plus

En el momento de este lanzamiento, estamos trabajando arduamente en nuestra hoja de ruta para 2020. Más adelante este año esperamos poner a disposición una implementación de nivel de producción de HTTP/3 (también conocida como QUIC). Si está interesado en seguir o probar esta tecnología, esté atento a los parches experimentales en las próximas semanas.

Nuevas funciones en detalle

Proxy gRPC dinámico

NGINX Plus R15 introdujo soporte para enrutamiento y equilibrio de carga del tráfico gRPC a grupos ascendentes. Puede aprovechar NGINX Plus para enrutar el tráfico gRPC incluyendo la directiva grpc_pass .

NGINX Plus R21 introduce soporte de variables en la directiva grpc_pass para proporcionar políticas de enrutamiento dinámicas impulsadas por API que se extienden a las cargas de trabajo de gRPC. Esto permite satisfacer casos de uso como:

  • Pruebas A/B : distribuya estadísticamente las solicitudes de gRRC entre varios upstreams para determinar cuál funciona mejor.
  • Enrutamiento de depuración : enruta el tráfico a un servicio gRPC de producción, pero enruta las solicitudes con atributos específicos (direcciones IP de origen, metadatos de gRPC) a un servicio gRPC de depuración.

La siguiente configuración es una implementación de muestra del enrutamiento de depuración.

En la línea 1, definimos un almacén de valores clave que puede usar rangos de red como clave (habilitado por el parámetro type=ip ). La línea 2 especifica que la variable $greeter_upstream se evalúa realizando una búsqueda en el almacén de clave-valor grpc-greeter , utilizando la dirección IP del cliente ( $remote_addr ) como clave.

En la línea 10, especificamos grpc://$greeter_upstream como parámetro de la directiva grpc_pass , para la terminación TLS y el enrutamiento dinámico de solicitudes gRPC según la subred IP del cliente.

Por ejemplo, puede ejecutar el siguiente comando en la instancia NGINX Plus para enrutar las solicitudes originadas en la subred 192.168.80.0/24 a grpc-servers-greeter-debug :

$ curl -iX POST -d '{"192.168.80.0/24":"grpc-servers-greeter-debug"}' http://localhost:8080/api/6/http/keyvals/grpc-greeter

Para cambiar el tráfico de gRPC al grupo de servicios de producción ( grpc-servers-greeter-prod ), ejecute el siguiente comando:

$ curl -iX PATCH -d '{"192.168.80.0/24":"grpc-servers-greeter-prod"}' https://localhost:8080/api/6/http/keyvals/grpc-greeter

Mejoras en el módulo JavaScript de NGINX

El módulo JavaScript de NGINX (njs) se ha actualizado a la versión 0.3.9 con varias correcciones de errores y algunas mejoras funcionales relacionadas con las subsolicitudes y la compatibilidad del sistema de archivos.

Subsolicitudes

La función r.subrequest permite que el código njs realice solicitudes HTTP asíncronas a cualquier URI. Esto tiene muchos usos posibles, siendo un ejemplo notable las llamadas API a un servidor de autenticación externo, por ejemplo, la introspección de tokens de OAuth 2.0 . Esta versión trae dos mejoras importantes a las subsolicitudes: promesas y subsolicitudes separadas.

[ Editor : Los siguientes dos casos de uso de muestra son solo algunos de los muchos para el módulo JavaScript de NGINX. Para obtener una lista completa, consulte Casos de uso del módulo JavaScript NGINX . ]

Promesas

Las subsolicitudes generalmente incluyen una función de devolución de llamada que procesa la respuesta de la subsolicitud. Ahora se puede omitir una función de devolución de llamada, utilizando promesas de JavaScript como una forma de procesar respuestas en línea con el código de llamada. El siguiente ejemplo ilustra cómo se pueden encadenar subsolicitudes sucesivas en una única secuencia de código sin utilizar devoluciones de llamadas.

Subsolicitudes separadas

Las subsolicitudes son asincrónicas y anteriormente debían invocarse desde una directiva js_content . Ahora las subsolicitudes también se pueden activar desde una directiva js_set durante la evaluación de la variable. Estas subsolicitudes “separadas” aún funcionan de forma asincrónica, pero no devuelven ningún dato a la función que las llama y se ignora cualquier respuesta.

El siguiente código de muestra utiliza subsolicitudes separadas para enviar una copia de los encabezados de solicitud a un sistema de gestión de eventos e información de seguridad ( SIEM ) si la cantidad total de datos intercambiados supera 1 MB.

[ Editor : La siguiente configuración se ha actualizado para usar la directiva js_import , que reemplazó la directiva js_include en NGINX Plus R23<.htmla>. Para obtener más información, consulte la documentación de referencia del módulo JavaScript de NGINX : la sección Configuración de ejemplo muestra la sintaxis correcta para la configuración de NGINX y los archivos JavaScript.]

Luego, el código JavaScript se ejecuta en la fase de registro solicitando la evaluación de la variable cuando escribimos el registro de acceso.

Sistema de archivos

El objeto del sistema de archivos JavaScript fs se ha mejorado para admitir promesas para operaciones asincrónicas. Además, hay nuevos métodos del sistema de archivos: access() , realpath() , symlink() y unlink() .

Actualice o pruebe NGINX Plus

Si está utilizando NGINX Plus, le recomendamos encarecidamente que actualice a NGINX Plus R21 lo antes posible. También recibirás una serie de correcciones y mejoras adicionales, y ayudará a NGINX a ayudarte cuando necesites generar un ticket de soporte.

Revise atentamente las nuevas características y los cambios de comportamiento descritos en esta publicación del blog antes de continuar con la actualización.

Si aún no ha probado NGINX Plus, le recomendamos que lo haga por cuestiones de seguridad, equilibrio de carga y puerta de enlace de API, o como servidor web totalmente compatible con API de administración y monitoreo mejoradas. Puede comenzar hoy con una prueba gratuita de 30 días . Vea usted mismo cómo NGINX Plus puede ayudarle a entregar y escalar sus aplicações.


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