Presentamos NGINX Plus R14

NGINX | 12 de diciembre de 2017

Nos complace anunciar que NGINX Plus Release 14 (R14) ya está disponible para nuestros suscriptores de NGINX Plus. NGINX Plus es el único equilibrador de carga, caché de contenido y servidor web todo en uno. Se basa en NGINX Open Source y añade funcionalidades exclusivas, además de un galardonado servicio de asistencia las 24 horas. NGINX Plus R14 incluye nuevas mejoras de seguridad y agrupación en clústeres.

Con NGINX Plus, puede aplicar controles de acceso mediante tokens web JSON (JWT). NGINX Plus R14 incorpora compatibilidad con declaraciones JWT anidadas, lo que permite conceder o denegar el acceso en función de la información de pertenencia a grupos anidada en un JWT. La compatibilidad nativa con la autenticación JWT, introducida por primera vez en NGINX Plus R10, permite utilizar NGINX Plus como puerta de enlace de autenticación para sus API y aplicaciones.

Otras características de NGINX Plus R14 incluyen:

  • Compatibilidad ampliada con clústeres (versión preliminar de la tecnología) – Le invitamos a probar una versión preliminar de una nueva funcionalidad para compartir información de estado entre las instancias de NGINX Plus de un clúster. En esta versión preliminar, se comparte el estado del método de persistencia de sesión sticky learn. En futuras versiones, ampliaremos la compatibilidad con clústeres a otras funciones de NGINX Plus.
  • Claves JWT de mayor tamaño – Además de admitir notificaciones JWT anidadas y datos de matriz, los algoritmos de firma JWT ahora admiten claves de mayor tamaño (hasta 512 bits). Esto proporciona más seguridad y flexibilidad al validar los JWT.
  • Almacén de clave-valor y API para flujos – El potente almacén de clave-valor y la API introducidos en la versión 13 para aplicaciones HTTP se amplían a las aplicaciones TCP y UDP en el contexto stream.
  • Mejoras en el módulo JavaScript de NGINX – El módulo, que permite ejecutar código JavaScript en NGINX Plus, ahora ofrece compatibilidad adicional con el objeto JSON. [Anteriormente, el módulo se llamaba nginScript.] Esto permite analizar y extraer de forma nativa información de las respuestas JSON recibidas de las API de backend, así como utilizar métodos al estilo de Node.js para acceder al sistema de archivos. Además, el módulo ahora proporciona trazas de pila para una amplia variedad de objetos de excepción y error cuando se producen, lo que facilita la depuración y la resolución de problemas.
  • Más funciones – NGINX Plus también incluye un panel actualizado de supervisión de la actividad en tiempo real, una nueva variable SSL y la retirada gradual de servidores upstream.

Cambios de comportamiento

  • La API de NGINX Plus se ha actualizado a la versión 2. Consulte la documentación sobre compatibilidad de la API si está pensando en utilizar nuevas funciones de la API de NGINX Plus.
  • Las API de los módulos Upstream-Conf y Status ampliado (habilitadas mediante las directivas upstream_conf y status) están obsoletas desde NGINX Plus R13. Han sido sustituidas por la nueva API de NGINX Plus, que utiliza el panel de supervisión de la actividad en tiempo real actualizado incluido en R14.
  • NGINX Plus ya está disponible para Ubuntu 17.10 (Artful Aardvark).
  • NGINX Plus ya no es compatible con Debian 7 (Wheezy).

Características de NGINX Plus R14 en detalle

Mejoras de JWT

Los responsables del despliegue de API y microservicios están adoptando el estándar JSON Web Token (JWT, pronunciado «yot») por su sencillez y flexibilidad. Un JWT es un medio compacto y muy portátil para intercambiar información de identidad. Puede obtener JWT de diversos emisores, como Okta, OneLogin y soluciones desarrolladas internamente. A continuación, NGINX Plus puede conceder o denegar el acceso en función de si el usuario o el cliente de la API ha presentado un JWT válido.

NGINX Plus R14 incorpora compatibilidad con declaraciones JWT anidadas y datos de matrices, así como claves de mayor tamaño para los algoritmos de firma JWT. Esto proporciona más flexibilidad y una mayor seguridad al validar los JWT.

Compatibilidad con notificaciones JWT anidadas y datos de matriz

La carga útil de un JWT puede contener información adicional «anidada» sobre el usuario, como la pertenencia a grupos, que puede utilizarse para autorizar el acceso a un recurso. Esto evita tener que consultar varias veces una base de datos para autorizar las solicitudes de los usuarios.

Considera la siguiente carga útil de JWT:

{  "exp": 1513429677,
  "sub": "xample@example.com",
  "aud": "nginx",
  "attributes": {
    "name": "Xavier Ample",
    "room": "A123",
    "dept": "Demonstrations"
  },
  "groups": [
    "Administrator",
    "Foobar",
    "Bazpub"
  ]
}

En el JWT anterior, attributes es un objeto de «declaración anidada» y groups es una matriz. Puede utilizar el siguiente fragmento de configuración para pasar el valor name del objeto attributes al backend y denegar el acceso a los usuarios que no pertenezcan al grupo Administrator.

auth_jwt_claim_set $jwt_groups groups; # Array value will join as comma-separated valuesauth_jwt_claim_set $jwt_real_name attributes name; # This value is two levels deep

map $jwt_groups $isAdmin {
	"~\bAdministrator\b" 1; # Appears within word boundaries (\b) of CSV list
	default              0;
}

server {
    listen 443 ssl;
    #ssl_*; # Config for SSL/TLS termination

    auth_jwt "closed site";
    auth_jwt_key_file jwk.json;

    location / {
        proxy_set_header X-RealName $jwt_real_name; # Pass real name as header
        proxy_set_header X-Subject  $jwt_claim_sub; # L1 claims set automatically
        proxy_pass http://my_backend;
    }
 
    location /admin {
        if ( $isAdmin = 0 ) {
            return 403; # Forbidden
        }
        proxy_pass http://my_backend;
    }
}

A continuación, se ofrecen más detalles sobre cómo funciona esta configuración:

  • Mediante la directiva auth_jwt_claim_set, establecemos la variable de NGINX $jwt_groups en el array groups definido en el JWT. Los valores del array se separan mediante comas y se asignan a $jwt_groups.
  • Mediante la directiva map, buscamos la palabra clave Administrator en la lista de grupos. Si está presente, se considera que el usuario es administrador y $isAdmin se establece en 1. De lo contrario, $isAdmin se establece en 0.
  • El bloque location del URI /admin comprueba la variable $isAdmin. Si su valor es 0, NGINX devuelve al cliente el código de estado 403 Forbidden.

Con NGINX Plus R14, también puede crear variables a partir de notificaciones JWT anidadas. Después, puede incluir las variables en cabeceras HTTP antes de enviar las solicitudes mediante proxy a los servidores backend.

En el ejemplo anterior, usamos la directiva auth_jwt_claim_set para asignar a la variable de NGINX $jwt_real_name el valor del objeto name de la notificación attributes. La directiva proxy_set_header establece el encabezado HTTP X-RealName en el valor del objeto name y reenvía la solicitud mediante proxy a my_backend.

Para obtener más información sobre todas las directivas de configuración disponibles para autenticar JWT con NGINX Plus, consulte la documentación de referencia.

Tamaños de clave más largos para los algoritmos de firma JWT

NGINX Plus R14 ahora admite claves de firma de 256, 384 y 512 bits para reforzar la validación de firmas y facilitar la integración con productos de gestión de identidades y accesos (IAM) que utilizan de forma predeterminada claves de firma más largas. Estas claves están disponibles para todos los algoritmos de firma compatibles:

  • HMAC con SHA‑2 («HS»)
  • RSA PKCS #1 con SHA‑2 («RS»)
  • Algoritmo de firma digital de curva elíptica («ES»)

Por ejemplo, puede configurar NGINX Plus R14 para que solo acepte tokens web JSON firmados con el algoritmo RS512:

server {    listen 443 ssl;
    #ssl_*; # Config for SSL/TLS termination

    auth_jwt "closed site";
    auth_jwt_key_file jwk.json;

    location / {
        if ( $jwt_header_alg != RS512 ) {
            return 401;
        }
        proxy_pass http://my_backend;
    }
}

En este caso, NGINX Plus no reenvía las solicitudes al proxy si el JWT no se ha firmado con el algoritmo RS512 y devuelve el código de estado 401 No autorizado al cliente que emitió la solicitud.

Nota: La compatibilidad con JWT es exclusiva de NGINX Plus.

Almacén de clave-valor y API para el módulo Stream

NGINX Plus R13 incorporó el módulo de almacenamiento de clave-valor para HTTP, que permite crear, modificar y eliminar al instante pares de clave-valor en una o varias zonas de memoria compartida. Un excelente caso de uso de la API del almacenamiento de clave-valor consiste en utilizarla con fail2ban para crear una lista dinámica de direcciones IP bloqueadas.

NGINX Plus R14 incorpora el módulo de almacenamiento de clave-valor para Stream, que ofrece a las aplicaciones TCP y UDP las mismas funciones de pares clave-valor que a las aplicaciones HTTP.

La reconfiguración dinámica del almacén de pares clave-valor en el contexto stream se implementa en NGINX Plus R14 como parte de la NGINX Plus API.

Nota: El almacén de clave-valor y la API son exclusivos de NGINX Plus.

Mejoras en el módulo JavaScript de NGINX

El módulo JavaScript de NGINX (anteriormente denominado nginScript) es un lenguaje de scripting basado en JavaScript para NGINX Plus. En NGINX Plus R14, se han ampliado las capacidades de JavaScript de NGINX para mejorar aún más la programabilidad. El paquete actualizado del módulo dinámico JavaScript de NGINX incorpora las siguientes mejoras.

Compatibilidad con objetos JSON

El objeto JSON de JavaScript ya está disponible como objeto nativo en NGINX JavaScript. Esto permite gestionar estructuras de datos complejas de forma más cómoda y también permite que NGINX JavaScript analice y manipule las respuestas JSON recibidas de las API de backend.

El siguiente ejemplo del shell de njs muestra cómo analizar y extraer datos JSON mediante la sintaxis de objetos integrada.

$ njsinteractive njscript

v.<Tab> -> the properties and prototype methods of v.
type console.help() for more information

>> var my_data = '{"colors":[{"name":"red","fancy":"brick dust"}, {"name":"blue","fancy":"sea spray"}]}';
>> var my_object = JSON.parse(my_data);
>> my_object.colors[1].fancy;
sea spray
>>

Acceso al sistema de archivos

Node.js, la implementación de JavaScript del lado del servidor más popular, proporciona métodos integrados para acceder al sistema de archivos del sistema operativo (JavaScript del lado del cliente no permite acceder al sistema de archivos). Con NGINX Plus R14, ahora puede utilizar los métodos del sistema de archivos de Node.js en NGINX JavaScript para leer y escribir archivos, lo que le permite personalizar el flujo de trabajo de entrega de su aplicación. Se permiten las siguientes operaciones:

  • Lectura – fs.readFile, fs.readFileSync
  • Escritura – fs.writeFile, fs.writeFileSync
  • Añadir al final – fs.appendFile, fs.appendFileSync

Este ejemplo del shell de NGINX JavaScript muestra cómo se puede utilizar NGINX JavaScript para leer el contenido de un archivo y almacenarlo en una variable.

$ njsinteractive njscript

v.<Tab> -> the properties and prototype methods of v.
type console.help() for more information

>> var fs = require('fs');
>> var tz = fs.readFileSync('/etc/timezone');
>> tz
Europe/London
>>

Objetos de error y trazas de pila

Para facilitar aún más a los desarrolladores la depuración y la resolución de problemas, ahora hay disponible una amplia variedad de objetos de error:

  • Error
  • EvalError
  • InternalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

Además, NGINX JavaScript ahora proporciona trazas de pila para errores y excepciones. La siguiente entrada del registro de errores muestra una traza de pila sencilla de una operación del sistema fallida.

2017/12/12 01:52:08 [error] 43441#43441: *10 js exception: Error: No such file or directory    at native (native)
    at my_function (:1)
    at main (native)
, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "localhost:80"

Descubre cómo empezar a usar NGINX JavaScript<.htmla> en nuestro blog.

Panel de control de NGINX Plus mediante la API de NGINX Plus

NGINX Plus R13 incorporó la API de NGINX Plus, que permite acceder a la supervisión y las métricas en tiempo real en formato JSON. En NGINX Plus R14, el panel de supervisión de la actividad en tiempo real integrado ahora utiliza la API de NGINX Plus y ofrece al usuario más de 80 métricas de supervisión en tiempo real.

Las API de reconfiguración dinámica y de estado ampliado que utilizaba el panel en versiones anteriores de NGINX Plus están obsoletas. Las API siguen estando disponibles en esta versión y se incluirán en NGINX Plus R15. Se eliminarán por completo en NGINX Plus R16, por lo que le recomendamos que actualice sus configuraciones ahora.

La configuración del panel obsoleto tiene este aspecto:

location /status { # DEPRECATED    status;        # DEPRECATED
    # directives controlling access, such as 'allow' and 'deny'
}

location = /status.html {       # DEPRECATED
    root /usr/share/nginx/html; # DEPRECATED
}

Para migrar sus instancias existentes de NGINX Plus al nuevo panel de NGINX Plus, sustituya el fragmento anterior por este:

location /api {    api write=on;
    # directives controlling access, such as 'allow' and 'deny'
}

location = /dashboard.html {
    root /usr/share/nginx/html;
}

# Redirect requests made to the old dashboard
location = /status.html {
    return 301 /dashboard.html;
}

Como se muestra en los fragmentos de código, recomendamos encarecidamente que limite el acceso a la API, por ejemplo, mediante las directivas «allow» y «deny». Asegúrese de migrar los controles de acceso existentes de la ubicación «/status» a la ubicación «/api».

Para obtener más información sobre la nueva API de NGINX Plus, consulte el anuncio de NGINX Plus R13.

Nota: El panel de control integrado es exclusivo de NGINX Plus.

Drenaje de servidores upstream en el archivo de configuración

Al desconectar un servidor, puede mejorar la experiencia del usuario permitiendo que las sesiones existentes finalicen e impidiendo al mismo tiempo que se establezcan nuevas sesiones. El servidor no se desconecta hasta que no queda ninguna sesión activa. Este proceso se denomina «drenaje» del servidor. Puede hacerlo de forma dinámica con la API de NGINX Plus enviando una solicitud PATCH que incluya {"drain":true} al recurso de la API correspondiente al servidor en cuestión.

NGINX Plus R14 amplía esta funcionalidad a la configuración basada en archivos mediante la incorporación de un parámetro drain a la directiva server de upstream.

upstream my_backend {        server  10.0.0.1;
        server  10.0.0.2;
        server  10.0.0.3 drain;
}

Al recargar la configuración de NGINX Plus, el servidor ascendente con la dirección IP 10.0.0.3 entra en modo de drenaje. Más adelante, puede retirar por completo el servidor eliminando la directiva server correspondiente o sustituyendo el parámetro draining por down.

Compatibilidad con clústeres para Sticky Learn (versión preliminar de la tecnología)

Con NGINX Plus R14, nos complace anunciar una versión preliminar de una futura funcionalidad para compartir el estado entre un clúster de instancias de NGINX Plus. Esta versión preliminar implementa el método de persistencia de sesión sticky learn para demostrar las ventajas de compartir datos de sesión que, de otro modo, gestionaría cada instancia por separado.

La versión preliminar de esta tecnología se proporciona como un paquete instalable independiente y está disponible previa solicitud. Póngase en contacto con su representante comercial de NGINX para obtener acceso.

Notas:

  1. La funcionalidad de agrupación en clúster de sticky learn se encuentra en fase preliminar y, por tanto, no es adecuada para su uso en producción. Si compartir el estado en un clúster es un requisito importante para su entorno, le recomendamos que pruebe la versión preliminar de la tecnología y comunique a NGINX en qué medida satisface sus necesidades.
  2. Los paquetes de la versión preliminar de la tecnología están disponibles para CentOS/RHEL/Oracle Linux 7, Debian 8 y 9, y Ubuntu 16.04, 16.10 y 17.10.

Nota: Tanto la compatibilidad con clústeres como la persistencia de sesión sticky‑learn son exclusivas de NGINX Plus.

Funciones adicionales

NGINX Plus R14 también incluye las siguientes mejoras:

  • Persistencia del estado del resolvedor entre recargas – Una forma de reconfigurar dinámicamente el conjunto de servidores de un grupo de servidores ascendentes consiste en utilizar un nombre de host o dominio como parámetro de la directiva server; DNS resuelve el nombre periódicamente y NGINX Plus utiliza automáticamente el conjunto de servidores actualizado (consulte la Guía de administración de NGINX Plus). Ahora, NGINX Plus conserva los registros DNS del nombre de host o dominio al recargarse. Anteriormente, el nombre tenía que volver a resolverse después de una recarga, por lo que no se podían atender las solicitudes que llegaban antes de que finalizara la resolución.
  • Nueva variable de certificado de cliente SSL – La variable $ssl_client_escaped_cert es una nueva variable integrada de NGINX que ofrece una forma segura y práctica de codificar los certificados de cliente en una cabecera HTTP para poder enviarlos a las aplicaciones de backend. La variable está codificada para URL.

Actualice o pruebe NGINX Plus

NGINX Plus R14 incluye funciones de autenticación mejoradas para sus aplicaciones cliente, funciones adicionales de agrupación en clústeres, mejoras de NGINX JavaScript y correcciones de errores importantes. En concreto, NGINX Plus R13 introdujo un error en las comprobaciones de estado activas por el que un proceso de trabajo antiguo podía realizar comprobaciones de estado indefinidamente. Este problema se ha resuelto en NGINX Plus R14.

Si utiliza NGINX Plus, le recomendamos encarecidamente que actualice a la versión 14 lo antes posible. Obtendrá numerosas correcciones y mejoras, y la actualización permitirá que NGINX pueda ayudarle cuando necesite abrir una incidencia de soporte. Las instrucciones de instalación y actualización están disponibles en el portal del cliente.

Revise detenidamente las nuevas funcionalidades y los cambios de comportamiento descritos en esta entrada del blog antes de proceder con la actualización.

Si aún no ha probado NGINX Plus, le animamos a hacerlo, ya sea para acelerar sitios web, equilibrar cargas y distribuir aplicaciones, o como servidor web con soporte completo y API avanzadas de supervisión y gestión. Puede empezar hoy mismo de forma gratuita con una evaluación de 30 días. Compruebe por sí mismo cómo NGINX Plus puede ayudarle a distribuir y escalar sus aplicaciones.


Compartir

Sobre el autor

Liam Crilly
Liam CrillyDirector sénior de Gestión de Producto

Más artículos de Liam Crilly

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Ú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
NGINX | 26/09/2023

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
NGINX | 10/03/2022

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
NGINX | 23/08/2021

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 | 09/06/2020

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 | 11/12/2018

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.