BLOG | NGINX

Announcing NGINX Plus R28

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Robert Haynes Miniatura
Robert Haynes
Publicado el 29 de noviembre de 2022

We’re happy to announce the availability of NGINX Plus Release 28 (R28). Based on NGINX Open Source, NGINX Plus is the only all-in-one software web server, load balancer, reverse proxy, content cache, and API gateway.

Las características nuevas y mejoradas de NGINX Plus R28 incluyen:

  • Métricas TLS adicionales : NGINX Plus R28 recopila estadísticas TLS adicionales a nivel de todo el sistema, del lado del cliente y del servidor, lo que proporciona información fundamental para solucionar errores relacionados con SSL/TLS en la configuración del proxy y para las conexiones a clientes y servidores ascendentes.

    El panel de monitoreo de actividad en vivo de NGINX Plus se actualiza para mostrar los nuevos datos de la sesión SSL.

  • Compatibilidad con TLV del protocolo PROXY v2 en servicios privados en la nube : cuando pone recursos a disposición de clientes externos a través de un “servicio privado” en AWS, Google Cloud Platform y Microsoft Azure, de manera predeterminada, el identificador de cliente específico del servicio representado en un vector de tipo-longitud-valor (TLV) en el encabezado del protocolo PROXY v2 no se pasa a los servicios de backend. NGINX Plus R28 presenta módulos para los contextos http y de flujo que decodifican el TLV y definen una variable para reenviar el identificador del cliente a los servicios backend.
  • Variable support for the sticky cookie samesite parameter – In NGINX Plus R28, the value of the samesite parameter to the sticky cookie directive can be a variable. This improvement allows for easier management of traffic and more security.

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.

Important Changes in Behavior

Nota:  Si está actualizando desde una versión distinta a NGINX Plus R27 , asegúrese de consultar la sección Cambios importantes en el comportamiento en los blogs de anuncios de todas las versiones entre su versión actual y esta.

Cambios en el soporte de la plataforma

Nuevos sistemas operativos y arquitecturas compatibles:

  • AlmaLinux 8 y 9 (x86_64, aarch64)
  • Alpine 3.17 (x86_64, arm64)
  • Oracle Linux 9 (x86_64)
  • Rocky Linux 8 y 9 (x86_64, aarch64)

Sistemas operativos más antiguos eliminados:

  • Debian 10, que llegó al final de su vida útil (EOL) en agosto de 2022

Sistemas operativos y arquitecturas más antiguos obsoletos y programados para su eliminación en NGINX Plus R29 :

  • Alpine 3.13, which reached EOL on November 1, 2022

Cambio en el manejo de múltiples encabezados con nombres idénticos

  • La mayoría de los encabezados de respuesta ascendentes duplicados conocidos ahora se ignoran con una advertencia
  • Ahora se rechazan los encabezados Content-Length y Transfer-Encoding duplicados, así como las respuestas con encabezados Content-Length o Transfer-Encoding no válidos, o si tanto Content-Length como Transfer-Encoding están presentes en la respuesta.

Nuevas funciones en detalle

Métricas TLS adicionales

La observabilidad de eventos y errores de SSL/TLS es importante a la hora de solucionar problemas relacionados con TLS con la configuración del proxy, servidores ascendentes y clientes. Desde la introducción de la API NGINX Plus en NGINX Plus R13 , NGINX Plus ha recopilado tres métricas TLS a nivel de todo el sistema:

  • protocolos de enlace : número de protocolos de enlace SSL exitosos
  • handshakes_failed : número de fallas de protocolo de enlace SSL (que no incluyen fallas de verificación de certificado que ocurren después del protocolo de enlace SSL)
  • session_reuses – Número de reutilizaciones de sesiones SSL

En NGINX Plus R27<.htmla> y versiones posteriores, puede configurar la recopilación de las tres métricas para servidores ascendentes individuales y servidores virtuales.

NGINX Plus R28 amplía el conjunto de métricas TLS con nuevos contadores para errores de protocolo de enlace y fallas de validación de certificados en los módulos HTTP y Stream (aquí proporcionamos ejemplos solo para módulos HTTP, pero las métricas Stream disponibles son similares). Para obtener detalles sobre cómo configurar la recopilación de métricas para servidores ascendentes individuales y servidores virtuales, consulte el blog de anuncio de NGINX Plus R27<.htmlspan> .

Handshake Errors

Los contadores para los siguientes errores de protocolo de enlace son nuevos en NGINX Plus R28 :

  • handshake_timeout : Número de fallos de protocolo de enlace debido al tiempo de espera del protocolo de enlace
  • no_common_cipher : número de fallas en el protocolo de enlace debido a la falta de un cifrado común entre las partes (no se recopila para conexiones a servidores ascendentes porque no corresponde)
  • no_common_protocol – Number of handshake failures due to lack of a common protocol between the parties
  • peer_rejected_cert : Número de fallos de protocolo de enlace debido a que la otra parte rechazó el certificado presentado por NGINX Plus y proporcionó el mensaje de alerta adecuado

Certificate Verification Failures

Certificate verification failures are now reported in the new verify_failures section of API output when you configure certificate verification:

Cuando ocurre una falla en la verificación del certificado, se incrementa la métrica de la causa correspondiente y se interrumpe la conexión. Tenga en cuenta, sin embargo, que el contador de apretones de manos básicos aún se incrementa porque estas fallas ocurren después de que el apretón de manos tiene éxito.

Las métricas para la validación de certificado fallida son:

  • expired_cert – El par presentó un certificado vencido
  • hostname_mismatch – Server’s certificate doesn’t match the hostname (not collected for connections to clients)
  • no_cert – Client didn’t provide a certificate as required (not collected for connections to upstream servers)
  • revoked_cert – El par presentó un certificado revocado
  • otro – Contador explícito para otros fallos de verificación de certificados

Salida de métricas de muestra

A continuación se muestra un conjunto de métricas TLS de muestra para conexiones HTTP a nivel de todo el sistema:

$ curl 127.0.0.1:8080/api/8/ssl { "apretones de manos": 32, "reutilizaciones de sesión": 0, "el protocolo de enlace falló": 8, "sin_protocolo_común": 4, "sin_cifrado_común": 2, "tiempo de espera del protocolo de enlace": 0, "certificado rechazado por pares": 0, "verificar_fallos": { "sin_certificado": 0, "certificado_caducado": 2, "certificado revocado": 1, "nombre_de_host_discordancia": 2, "otro": 1 } }

Here’s a set of sample metrics for connections between clients and the HTTP virtual server s9 (as noted previously, the hostname_mismatch counter is not collected for such connections):

$ curl 127.0.0.1:8080/api/8/http/server_zones/s9 { ... "ssl": { "apretones de manos": 0, "reutilizaciones de sesión": 0, "el protocolo de enlace falló": 1, "sin_protocolo_común": 0, "sin_cifrado_común": 1, "tiempo de espera del protocolo de enlace": 0, "certificado rechazado por pares": 0, "verificar_fallos": { "sin_certificado": 0, "certificado_caducado": 0, "certificado revocado": 0, "otro": 0 } } ... }

A continuación se muestra un conjunto de métricas de muestra para conexiones HTTP a servidores en el grupo ascendente u2 (como se señaló anteriormente, los contadores no_cert y no_common_cipher no se recopilan para dichas conexiones):

$ curl 127.0.0.1:8080/api/8/http/upstreams/u2 { "pares": [ { "id": 0, "servidor": "127.0.0.1:8082", "nombre": "127.0.0.1:8082", ... "ssl": { "apretones de manos": 1, "reutilizaciones de sesión": 0, "el protocolo de enlace falló": 0, "sin_protocolo_común": 0, "tiempo de espera del protocolo de enlace": 0, "certificado rechazado por pares": 0, "verificar_fallos": { "certificado_expirado": 1, "certificado revocado": 0, "nombre de host no coincidente": 0, "otro": 0 } }, ... } ], }

El panel de NGINX Plus muestra las métricas TLS extendidas

For NGINX Plus R28 and later, the live activity monitoring dashboard displays the new TLS metrics described above. This screenshot shows metrics for connections to clients. To view the new metrics, mouse over the value in the SSL > Handshakes failed column as shown.

Compatibilidad con TLV del protocolo PROXY v2 en servicios privados en la nube

The three leading cloud providers – Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure – each offer a “private service” where you can enable external clients to access your services without exposing them on the public Internet. Each service makes use of a client identifier which is represented in a type-length-value (TLV) vector in a PROXY protocol v2 header. The service‑specific identifiers are:

De forma predeterminada, estos identificadores de cliente no se pasan a los servicios backend. NGINX Plus R28 presenta módulos para los contextos http y de flujo : ngx_http_proxy_protocol_vendor_module y ngx_stream_proxy_protocol_vendor_module , que decodifican el TLV y definen una variable para reenviar el identificador a los servicios backend.

Para obtener información general sobre cómo NGINX Plus utiliza el protocolo PROXY para obtener direcciones IP y otra información sobre los clientes, consulte Aceptación del protocolo PROXY en la Guía de administración de NGINX Plus.

PROXY Protocol v2 Support for AWS

En AWS, la dirección IP de origen del tráfico que proviene de los clientes a través de un servicio de punto final de nube privada virtual (VPC) es la dirección IP privada del nodo Network Load Balancer. Si la aplicação backend requiere las direcciones IP reales y otros identificadores para los clientes, se pueden obtener de los encabezados del protocolo PROXY v2.

En AWS, un vector TLV personalizado codifica el ID de VPC del punto final en el encabezado del protocolo PROXY v2 PP2_SUBTYPE_AWS_VPCE_ID . (Para obtener más información, consulte la documentación de AWS ).

Campo Longitud (octetos) Descripción
Tipo 1 PP2_TYPE_AWS ( 0xEA )
Longitud 2 La longitud del valor
Valor 1 PP2_SUBTYPE_AWS_VPCE_ID ( 0x01 )
Varies (value length minus 1) El ID del punto final

NGINX Plus R28 decodifica el TLV y pasa el ID del punto final a las aplicações backend en la variable $proxy_protocol_tlv_aws_vpce_id .

Nota:  En el bloque del servidor donde hace referencia a la variable $proxy_protocol_tlv_aws_vpce_id , también debe incluir el parámetro proxy_protocol en la directiva listen [ HTTP ][ Stream ]. Para ver un ejemplo, consulte la línea 8 de proxy_protocol_v2.conf justo debajo.

This sample configuration for AWS checks that the VPC ID is acceptable and if so passes it to the backend application as the second parameter to the add_header directive:

Compatibilidad del protocolo PROXY v2 con GCP

En GCP Private Service Connect, la dirección IP de origen del tráfico proveniente de los clientes es una “dirección en una de las subredes de Private Service Connect en la red VPC del productor de servicios”. Si la aplicação backend requiere las direcciones IP reales y otros identificadores para los clientes, se pueden obtener de los encabezados del protocolo PROXY v2.

En GCP, un vector TLV personalizado codifica la ID de conexión única (en ese momento) en el encabezado del protocolo PROXY v2 pscConnectionId . (Para obtener más información, consulte la documentación de GCP ).

Campo Length (Bytes) Descripción
Tipo 1 0xE0 (PP2_TYPE_GCP)
Longitud 2 0x8 (8 bytes)
Valor 8 El pscConnectionId de 8 bytes en orden de red

NGINX Plus R28 decodifica el TLV y pasa el valor de pscConnectionId a las aplicações backend en la variable $proxy_protocol_tlv_gcp_conn_id .

Note: In the server block where you reference the $proxy_protocol_tlv_gcp_conn_id variable, you must also include the proxy_protocol parameter to the listen[HTTP][Stream] directive. For an example, see line 8 of proxy_protocol_v2.conf above.

Compatibilidad del protocolo PROXY v2 con Microsoft Azure

En Microsoft Azure Private Link, la dirección IP de origen para el tráfico proveniente de los clientes es la “dirección de red traducida (NAT) del lado del proveedor de servicios que utiliza la dirección IP NAT asignada desde la red virtual del proveedor”. Si la aplicação backend requiere las direcciones IP reales y otros identificadores para los clientes, se pueden obtener de los encabezados del protocolo PROXY v2.

En Azure, un vector TLV personalizado codifica el LinkID del cliente en el encabezado del protocolo PROXY v2 PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID . (Para obtener más información, consulte la documentación de Azure ).

Campo Longitud (octetos) Descripción
Tipo 1 PP2_TYPE_AZURE ( 0xEE )
Longitud 2 Length of value
Valor 1 PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID ( 0x01 )
4 UINT32 (4 bytes) que representa el LINKID del punto final privado. Codificado en formato little-endian.

NGINX Plus R28 decodifica el TLV y pasa el LinkID a las aplicações backend en la variable $proxy_protocol_tlv_azure_pel_id .

Nota:  En el bloque del servidor donde hace referencia a la variable $proxy_protocol_tlv_azure_pel_id , también debe incluir el parámetro proxy_protocol en la directiva listen [ HTTP ][ Stream ]. Para ver un ejemplo, consulte la línea 8 de proxy_protocol_v2.conf más arriba.

Soporte de variables para el parámetro Sticky Cookie samesite

En versiones anteriores de NGINX Plus, se aceptaban tres valores estáticos ( strict , lax y none ) para el parámetro samesite de la directiva de cookies adhesivas . En NGINX Plus R28 , el valor también puede ser una variable.

De forma predeterminada (no hay ningún parámetro SameSite ), NGINX no inyecta el atributo SameSite en la cookie. Cuando el parámetro samesite es una variable, el resultado depende de cómo se resuelve la variable en tiempo de ejecución:

  • A uno de los valores estándar ( estricto , laxo y ninguno ), NGINX inyecta el atributo SameSite establecido en ese valor.
  • To an empty value ("") – NGINX does not inject the SameSite attribute
  • Para cualquier otro valor que indique una configuración incorrecta, NGINX inyecta el atributo SameSite establecido en Estricto (la configuración más segura).

This sample configuration sets the samesite attribute based on the value of the HTTP User-Agent header (this is good for legacy clients that don’t support the SameSite attribute):

 

Otras mejoras en NGINX Plus R28

Cambios heredados de NGINX de código abierto

NGINX Plus R28 is based on NGINX Open Source 1.23.2. and inherits functional changes and bug fixes made since NGINX Plus R27 was released (in NGINX 1.23.0 through 1.23.2). Changes and bug fixes include:

  • El nuevo parámetro ipv4=off de la directiva de resolución HTTP deshabilita la búsqueda de direcciones IPv4.
  • Cuando habilita un caché compartido para la información de la sesión HTTP con el parámetro shared en la directiva ssl_session_cache , las claves de ticket de sesión TLS ahora se rotan automáticamente.
  • The severity level at which several types of TLS/SSL errors are logged is lowered from crit to info.

Para obtener la lista completa de nuevas características, cambios y correcciones de errores heredados de estas versiones, consulte el archivo CAMBIOS .

Cambios en el módulo JavaScript de NGINX

NGINX Plus R28 incorpora cambios y correcciones realizados en las versiones 0.7.5 a 0.7.8 del módulo JavaScript de NGINX (njs). Hemos destacado algunos de los más importantes en Haga que su configuración NGINX sea aún más modular y reutilizable con njs 0.7.7 en nuestro blog. Para obtener una lista completa, consulte el archivo Cambios .

Upgrade or Try NGINX Plus

If you’re running NGINX Plus, we strongly encourage you to upgrade to NGINX Plus R28 as soon as possible. You’ll also pick up several additional fixes and improvements, and it will help NGINX to help you when you need to raise a support ticket.

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 .


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