BLOG | NGINX

Annonce de NGINX Plus R32

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Prabhat Dixit
Prabhat Dixit
Publié le 28 mai 2024

Nous sommes ravis d’annoncer la disponibilité de NGINX Plus Release 32 (R32). Basé sur NGINX Open Source, NGINX Plus est le seul serveur Web logiciel tout-en-un, équilibreur de charge, proxy inverse, cache de contenu et passerelle API.

Les fonctionnalités nouvelles et améliorées de NGINX Plus R32 incluent :

  • Mise en cache des certificats SSL — NGINX Plus R32 introduit des améliorations significatives dans le temps de démarrage et l'utilisation de la mémoire de NGINX dans les cas de configurations avec un grand nombre d'emplacements avec des paires certificat/clé SSL répétées.
  • Module Stream_pass — NGINX Plus R32 permet désormais au module de flux de servir de routeur, permettant aux connexions d'être transmises de manière conditionnelle du module de flux à d'autres modules comme http, mail ou de revenir au flux lui-même.
  • Images de conteneur officielles NGINX Plus — NGINX Plus R32 introduit la disponibilité d'images de conteneur officielles NGINX Plus pour les environnements d'exécution de conteneurs privilégiés et non privilégiés. De plus, les deux méthodes de déploiement sont livrées avec des images de conteneur facultatives qui incluent NGINX Agent, un démon compagnon qui permet une intégration transparente avec les solutions de plan de gestion NGINX.

La version est complétée par de nouvelles fonctionnalités et des corrections de bugs héritées de NGINX Open source et des mises à jour du module JavaScript NGINX.

Changements importants dans le comportement

Note: Si vous effectuez une mise à niveau à partir d'une version autre que NGINX Plus R31, assurez-vous de consulter la section Modifications importantes du comportement dans les blogs d'annonces précédents pour toutes les versions entre votre version actuelle et celle-ci.

Obsolescence du module OpenTracing

Le module OpenTracing, introduit dans NGINX Plus R18, est obsolète et marqué pour suppression dans NGINX Plus R34. Les packages associés seront mis à disposition avec toutes les versions de NGINX Plus d'ici là. Nous vous conseillons fortement de remplacer l'utilisation du module OpenTracing par le module OpenTelemetry , introduit dans NGINX Plus R29 .

Suppression du module ModSecurity

Le module ModSecurity a atteint la fin du support le 31 mars 2024. Par conséquent, les packages modsec ont été supprimés du référentiel NGINX Plus et ne seront plus disponibles à partir du référentiel NGINX Plus à l'avenir.

Mise à jour de la clé PGP

Les packages NGINX Open Source et NGINX Plus sont signés à l'aide d'une clé PGP. Cette clé expirera le 16 juin 2024. Nous avons mis à jour la date d'expiration de la clé afin que les packages existants puissent continuer à être vérifiés après le 16 juin 2024. Nous allons générer de nouvelles paires de clés pour signer les packages des prochaines versions.

Tous les utilisateurs de NGINX doivent télécharger et installer la clé PGP mise à jour en suivant ces étapes :

Sur Ubuntu/Debian :

wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --chermor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Sur RHEL/CentOS :

sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.key

Vous ne pourrez pas vérifier vos signatures logicielles après le 16 juin 2024, jusqu'à ce que vous mettiez à jour votre clé.

Politique de conditionnement et de diffusion future

Dans les futures versions de NGINX Plus, nous rationaliserons notre politique de packaging et de publication. NGINX Plus sera construit et testé uniquement sur les dernières versions des distributions de systèmes d'exploitation prises en charge. Si vous installez NGINX Plus sur des distributions plus anciennes, votre gestionnaire de paquets peut suggérer de mettre à jour les bibliothèques et les paquets dépendants.

Modifications apportées à la prise en charge de la plateforme

Les modifications suivantes ont été apportées aux plateformes prises en charge dans cette version.

Nouveaux systèmes d’exploitation pris en charge :

  • Ubuntu 24.04

Anciens systèmes d’exploitation supprimés :

  • FreeBSD 12 qui a atteint la fin de vie le 31 décembre 2023

Les anciens systèmes d'exploitation sont obsolètes et leur suppression est prévue dans NGINX Plus R33 :

  • CentOS7/RHEL7/Oracle Linux 7
  • Alpine Linux 3.16

Nouvelles fonctionnalités en détail

Mise en cache des certificats SSL pour améliorer le comportement de chargement de NGINX

Auparavant, NGINX chargeait un certificat, une clé ou une liste de révocation de certificats chaque fois qu’il était référencé dans la configuration NGINX. Cela signifiait que plusieurs références au même objet entraînaient un nombre égal de rechargements de cet objet. Cette latence serait aggravée lors de l’héritage de directives telles que des listes de certificats de confiance. Dans certaines conditions, ce comportement aurait un impact significatif sur le temps de démarrage de NGINX et pourrait nécessiter de grandes quantités de mémoire pour stocker les configurations.

Dans le cadre du nouveau comportement, les directives SSL font désormais référence aux fichiers de certificats mis en cache et aux objets associés. Par conséquent, les empreintes mémoire et les temps de chargement des configurations qui référencent de manière répétée les mêmes objets de certificat sont considérablement réduits. L’avantage est particulièrement évident dans les cas impliquant de grandes configurations NGINX où un petit ensemble de certificats de confiance est référencé sur un grand nombre de blocs d’emplacement.

Voici une visualisation de l’amélioration du temps de chargement lorsque NGINX est configuré avec environ 5 400 blocs d’emplacements (de niveau supérieur et imbriqués) et 878 certificats.

amélioration du temps de chargement

Notez la baisse significative des temps de chargement vers le côté droit du graphique, où le temps de chargement moyen diminue d'environ 40 secondes avant le changement à environ 6 secondes sous le nouveau comportement.

Transférer les connexions du module de flux vers d'autres modules

NGINX Plus R32 hérite d'une fonctionnalité de NGINX open source 1.25.5 qui ajoute une nouvelle couche de configurabilité à NGINX. Plus précisément, le module de flux NGINX peut désormais fonctionner comme un routeur, servant de proxy avec la possibilité de transmettre des connexions du contexte de flux à d'autres contextes comme http, mail ou à un serveur virtuel distinct dans le contexte de flux lui-même.

Cette fonctionnalité est disponible dans le cadre du module ngx_stream_pass_module , introduit dans cette version. Le module dispose d'une seule directive « pass » qui peut être utilisée pour spécifier l'adresse à laquelle transmettre les connexions client. L'adresse peut être spécifiée par une combinaison d'adresse IP et de port, un chemin de socket ou référencée par des variables NGINX.

Grâce à cette fonctionnalité, les clients qui souhaitent exécuter tout leur trafic via un seul point de terminaison L4 peuvent désormais terminer les connexions SSL au niveau du contexte de flux L4 et les transmettre à d'autres modules (http, mail) ou à d'autres serveurs virtuels dans le contexte de flux. De plus, les connexions SSL peuvent être interrompues de manière conditionnelle en fonction des noms de serveur ou des protocoles, tout en acheminant le trafic restant ailleurs. Cela ouvre un nouvel ensemble de comportements de configuration possibles pour la gestion du trafic à partir d'un seul point de terminaison.

L'extrait de configuration suivant met fin aux connexions SSL dans le module de flux et les transmet de manière conditionnelle au contexte http ou à un autre serveur virtuel dans le contexte de flux, en fonction du nom de serveur demandé.

http {
serveur {
écoute 8000 ;

emplacement / {
retour 200 foo ;
}
}
}

flux {
map $ssl_server_name $pass_port {
foo.example.com 8000 ;
par défaut 9001 ;

}

serveur {
écoute 9000 ssl ;

certificat_ssl domaine.crt ;
clé_certificat_ssl domaine.key ;

passe 127.0.0.1 : $pass_port ;
}
serveur{
écoute 9001 ;
retour bar\n ;
}

}

Dans cet exemple, toutes les connexions SSL se terminent au niveau du bloc serveur de flux. Selon le nom du serveur dans la requête entrante, les connexions sont transmises soit au serveur http écoutant sur le port 8000, soit au serveur virtuel de flux écoutant sur le port 9001.

Une autre application du module s'adresse aux cas d'utilisation où un module tiers ne prend pas en charge la terminaison SSL. Dans de tels scénarios, le module stream_pass peut mettre fin aux connexions chiffrées TLS avant de les transmettre au module tiers.

Cet exemple montre comment le module RTMP , qui ne prend pas en charge SSL de manière native, peut utiliser le module stream_pass pour accepter le trafic chiffré TLS.

rtmp {
serveur {
écoute 1935 ;#rtmp

application foo{

en direct ;
}
}
}

flux {
serveur {
écoute 1936 ssl ; #rtmps

certificat_ssl domaine.crt ;
clé_certificat_ssl domaine.key ;

passage 127.0.0.1 :1935 ;
}
}

Dans cet extrait de configuration, la connexion SSL est terminée dans le bloc du serveur de flux et transmise au rtmp. La connexion apparaît non chiffrée pour le module RTMP, ce qui élimine le besoin de personnalisation supplémentaire ou de surcharge de traitement pour prendre en charge les connexions SSL.

Images du conteneur NGINX Plus

NGINX Plus R32 inclut la disponibilité officielle des images de conteneurs NGINX Plus pour l'exécution privilégiée et non privilégiée de NGINX Plus. Les deux types de conteneurs sont également disponibles avec des installations facultatives de NGINX Agent pour une connectivité facile aux plans de gestion pris en charge par NGINX. Les images peuvent être téléchargées à partir du registre NGINX, disponible à l'adresse : private-registry.nginx.com. Suivez ces instructions pour accéder à l'image avec votre certificat NGINX Plus et votre clé ou jeton Web JSON (JWT).

Autres améliorations et corrections de bugs dans NGINX Plus R32

Correction de bug dans le module MQTT

  • Paquets mal formés lors de l'utilisation des propriétés par défaut : Cette version contient un correctif pour un problème entraînant des paquets mal formés dans le module Message Queuing Telemetry Transport (MQTT), introduit dans NGINX Plus R29 . Auparavant, lorsque le champ de propriétés était présent et contenait des valeurs par défaut pour toutes les propriétés du message MQTT Connect, la longueur du paquet sortant ne tenait pas compte du champ de longueur de propriété (1 octet). Cela a entraîné une longueur de paquet inférieure d'un octet à celle attendue et a conduit à un paquet mal formé. Ce correctif dans R32 résout ce problème.

Correction de bug dans le module zone_sync

  • Fuite de mémoire lors du rechargement de la configuration : Auparavant, les opérations de synchronisation des files d’attente en attente utilisaient des liens de chaîne alloués à partir d’un pool distinct qui n’était jamais libéré. Cela a entraîné des fuites de mémoire dans le maître, ainsi que dans tous les processus de travail. Le correctif de cette version revient à une implémentation de synchronisation de zone antérieure qui utilise un pool de cycles pour la file d'attente en attente.

Correctifs de sécurité

Les problèmes de sécurité potentiels suivants ont été identifiés et corrigés dans l’implémentation expérimentale HTTP3/QUIC.

  • Dépassement de capacité du tas avec écriture ( CVE-2024-32760 ) : Les instructions d'encodeur HTTP/3 non divulguées peuvent entraîner l'arrêt des processus de travail NGINX ou provoquer d'autres impacts possibles.
  • Débordement de pile/utilisation de mémoire après libération ( CVE-2024-31079 ) : Les requêtes HTTP/3 non divulguées peuvent entraîner l'arrêt des processus de travail NGINX ou provoquer d'autres impacts possibles. Cette attaque nécessite qu'une requête soit spécifiquement programmée pendant le processus de drainage de la connexion, sur lequel l'attaquant n'a aucune visibilité et une influence limitée.
  • Déréférencement de pointeur nul avec en-tête vide ( CVE-2024-35200 ) : Les requêtes HTTP/3 non divulguées peuvent entraîner l'arrêt des processus de travail NGINX ou provoquer d'autres impacts possibles.
  • Divulgation de mémoire lors de l'établissement d'une liaison QUIC ( CVE-2024-34161 ) : Lorsque l'infrastructure réseau prend en charge une unité de transmission maximale (MTU) de 4096 ou plus sans fragmentation, les messages QUIC non divulgués peuvent entraîner l'arrêt des processus de travail NGINX ou provoquer une fuite de mémoire précédemment libérée.

Modifications héritées de NGINX Open Source

NGINX Plus R32 est basé sur NGINX Open Source 1.25.5 et hérite des modifications fonctionnelles, des fonctionnalités et des corrections de bogues apportées depuis la sortie de NGINX Plus R31 (dans NGINX 1.25.4 et 1.25.5).

Caractéristiques:

  • Serveurs virtuels dans le module de flux.
  • Le module ngx_stream_pass_module.
  • Les paramètres « deferred », « accept_filter » et « setfib » de la directive « listen » dans le module stream.
  • Détection de la taille de la ligne de cache pour certaines architectures.
  • Prise en charge de Homebrew sur Apple Silicon.

Corrections de bugs :

  • Corrections de bugs et améliorations de la compilation croisée Windows.
  • Fermeture de connexion inattendue lors de l'utilisation de 0-RTT dans QUIC.
  • Les connexions avec des opérations AIO en attente peuvent être fermées prématurément lors de l'arrêt normal des anciens processus de travail.
  • Les alertes de fuite de socket ne sont plus enregistrées lorsqu'un arrêt rapide a été demandé après l'arrêt normal des anciens processus de travail.
  • Une erreur de descripteur de socket, une fuite de socket ou une erreur de segmentation dans un processus de travail (pour le proxy SSL) peut se produire si AIO a été utilisé dans une sous-requête.
  • Une erreur de segmentation peut se produire dans un processus de travail si le proxy SSL a été utilisé avec la directive « image_filter » et que les erreurs avec le code 415 ont été redirigées avec la directive « error_page ».
  • Corrections de bugs et améliorations dans HTTP/3.

Sécurité:

  • Lors de l'utilisation de HTTP/3, une erreur de segmentation peut se produire dans un processus de travail lors du traitement d'une session QUIC spécialement conçue ( CVE-2024-24989 , CVE-2024-24990 ).

Pour la liste complète des nouveaux changements, fonctionnalités, corrections de bogues et solutions de contournement hérités des versions récentes, consultez le fichier des modifications NGINX.

Modifications apportées au module JavaScript NGINX

NGINX Plus R32 intègre les modifications du module NGINX JavaScript (njs) version 0.8.4. Voici une liste des changements notables dans njs depuis la version 0.8.2 (qui était la version livrée avec NGINX Plus R31).

Caractéristiques

  • Fonctionnalité : l'en-tête du serveur pour l'en-tête sortant peut être défini.
  • Fonctionnalité: Prise en charge du moteur QuickJS en CLI.

Changements

  • Amélioration : validation des arguments URI et args dans r.subrequest().
  • Amélioration : vérifie les variables js_set en double.

Corrections de bugs

  • Correction de bug : correction de Headers.set().
  • Correction de bug : correction de js_set avec les valeurs Buffer.
  • Correction de bug : correction de la méthode clear() d'un dictionnaire partagé lorsqu'un délai d'attente n'est pas spécifié.
  • Correction de bug : statistiques stub_status corrigées lorsque js_periodic est activé.
  • Correction de bug : construction corrigée avec libxml2 2.12 et versions ultérieures.
  • Correction de bug : constructeur de date corrigé pour les débordements et avec des valeurs NaN.
  • Correction de bogue : dépassement de capacité corrigé dans querystring.parse().
  • Correction de bogue : correction d'un dépassement potentiel de tampon dans String.prototype.match().
  • Correction de bug : analyse corrigée des boucles for-in.
  • Correction de bogue : analyse corrigée des littéraux hexadécimaux, octaux et binaires sans chiffres.
  • Correction de bug : correction de la méthode clear() d'un dictionnaire partagé sans délai d'attente introduit dans0.8.3 .
  • Correction de bug : correction de la méthode r.send() d'un dictionnaire partagé sans délai d'attente avec l'argument Buffer.
  • Correction de bug : correction de atob() avec des chaînes base64 non complétées.

Pour une liste complète de toutes les fonctionnalités, modifications et corrections de bogues, consultez le journal des modifications njs.

Mettre à niveau ou essayer NGINX Plus

Si vous utilisez NGINX Plus, nous vous encourageons vivement à effectuer une mise à niveau vers NGINX Plus R32 dès que possible. En plus de toutes ces nouvelles fonctionnalités, vous bénéficierez également de plusieurs correctifs et améliorations supplémentaires, ce qui permettra à NGINX de vous aider plus facilement si vous devez ouvrir un ticket d'assistance.

Si vous n'êtes pas un utilisateur de NGINX Plus, nous vous encourageons à l'essayer. Vous pouvez l'utiliser pour la sécurité, l'équilibrage de charge et les cas d'utilisation de passerelle API, ou comme serveur Web entièrement pris en charge avec des API de surveillance et de gestion améliorées. Commencez dès aujourd'hui avec un essai gratuit de 30 jours .


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."