Nous sommes ravis d’annoncer la disponibilité de NGINX Plus version 32 (R32). Basé sur NGINX Open Source, NGINX Plus est la seule solution logicielle tout-en-un faisant office de serveur web, d’équilibreur de charge, de proxy inverse, de cache de contenu et de passerelle API.
Les fonctionnalités nouvelles et améliorées de NGINX Plus R32 incluent :
- Mise en cache des certificats SSL — NGINX Plus R32 améliore considérablement le temps de démarrage de NGINX et l’utilisation de la mémoire pour les configurations comportant un grand nombre d’emplacements utilisant de manière répétée les mêmes paires certificat/clé SSL.
- Module Stream_pass — NGINX Plus R32 permet désormais au module stream de faire office de routeur, afin de transférer les connexions de manière conditionnelle depuis le module stream vers d’autres modules tels que http ou mail, ou de les renvoyer vers le module stream lui-même.
- Images de conteneur officielles NGINX Plus — NGINX Plus R32 propose désormais des images de conteneur officielles NGINX Plus pour les environnements d’exécution de conteneurs privilégiés et non privilégiés. En outre, les deux méthodes de déploiement proposent des images de conteneur facultatives qui incluent NGINX Agent, un démon complémentaire permettant une intégration transparente avec les solutions de plan de gestion NGINX.
Cette version est complétée par de nouvelles fonctionnalités et des corrections de bogues héritées de NGINX Open Source, ainsi que par des mises à jour du module JavaScript de NGINX.
Modifications importantes du comportement
Remarque : si vous effectuez une mise à niveau depuis une version autre que NGINX Plus R31, veillez à consulter la section « Modifications importantes du comportement » dans les précédents billets d’annonce pour toutes les versions comprises entre votre version actuelle et celle-ci.
Abandon du module OpenTracing
Le module OpenTracing, introduit dans NGINX Plus R18, est désormais obsolète et sa suppression est prévue dans NGINX Plus R34. Les packages associés resteront disponibles avec toutes les versions de NGINX Plus jusque-là. Nous vous recommandons vivement de remplacer le module OpenTracing par le module OpenTelemetry, introduit dans NGINX Plus R29.
Suppression du module ModSecurity
La prise en charge du module ModSecurity a pris fin le 31 mars 2024. Par conséquent, les paquets modsec ont été supprimés du dépôt NGINX Plus et n’y seront désormais plus disponibles.
Mise à jour de la clé PGP
Les paquets NGINX Open Source et NGINX Plus sont signés à l’aide d’une clé PGP. Cette clé devait expirer le 16 juin 2024. Nous avons mis à jour sa date d’expiration afin que les paquets existants puissent continuer à être vérifiés après le 16 juin 2024. Nous générerons de nouvelles paires de clés pour signer les paquets des prochaines versions.
Tous les utilisateurs de NGINX doivent télécharger et installer la clé PGP mise à jour en suivant ces étapes :
Sous Ubuntu/Debian :
wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/nullSous RHEL/CentOS :
sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.keyVous ne pourrez plus vérifier les signatures de vos logiciels après le 16 juin 2024 tant que vous n’aurez pas mis à jour votre clé.
Politique future de création des paquets et de publication
Dans les prochaines versions de NGINX Plus, nous simplifierons notre politique de création des paquets et de publication. NGINX Plus sera compilé et testé uniquement sur les versions les plus récentes des distributions de systèmes d’exploitation prises en charge. Si vous installez NGINX Plus sur des distributions plus anciennes, votre gestionnaire de paquets pourra vous suggérer de mettre à jour les bibliothèques et paquets dépendants.
Modifications de la prise en charge des plateformes
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, dont la fin de vie a été atteinte le 31 décembre 2023
Anciens systèmes d’exploitation obsolètes et dont la 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 NGINX en charge
Auparavant, NGINX chargeait un certificat, une clé ou une liste de révocation de certificats chaque fois que cet élément était référencé dans la configuration NGINX. Ainsi, plusieurs références au même objet entraînaient autant de rechargements de cet objet. Cette latence s’accumulait lors de l’héritage de directives telles que les listes de certificats de confiance. Dans certaines conditions, ce comportement pouvait considérablement ralentir le démarrage de NGINX et nécessiter une grande quantité de mémoire pour stocker les configurations.
Avec ce nouveau comportement, les directives SSL font désormais référence à des fichiers de certificats mis en cache et aux objets associés. Par conséquent, l’empreinte mémoire et les temps de chargement des configurations qui font référence de manière répétée aux mêmes objets de certificat sont considérablement réduits. Ce gain est particulièrement notable pour les configurations NGINX volumineuses dans lesquelles un petit ensemble de certificats de confiance est référencé dans un grand nombre de blocs location.
Voici une représentation visuelle de l’amélioration du temps de chargement lorsque NGINX est configuré avec environ 5 400 blocs location (de premier niveau et imbriqués) et 878 certificats.

Remarquez la baisse significative des temps de chargement sur la partie droite du graphique : le temps de chargement moyen passe d’environ 40 secondes avant la modification à environ 6 secondes avec le nouveau comportement.
Transmettre les connexions du module Stream à d’autres modules
NGINX Plus R32 hérite d’une fonctionnalité de NGINX open source 1.25.5 qui ajoute un nouveau niveau de configurabilité à NGINX. Plus précisément, le module stream de NGINX peut désormais fonctionner comme un routeur, en faisant office de proxy capable de transmettre les connexions du contexte stream à d’autres contextes tels que http ou mail, ou à un serveur virtuel distinct au sein même du contexte stream.
Cette fonctionnalité est disponible dans le cadre du module ngx_stream_pass_module, introduit dans cette version. Ce module comporte une seule directive, « pass », qui permet de spécifier l’adresse vers laquelle transmettre les connexions clientes. Cette adresse peut être définie par une combinaison d’adresse IP et de port, par un chemin de socket ou à l’aide de variables NGINX.
Grâce à cette fonctionnalité, les clients qui souhaitent faire transiter l’ensemble de leur trafic par un point de terminaison L4 unique peuvent désormais terminer les connexions SSL dans le contexte de flux L4 et les transmettre à d’autres modules (http, mail) ou à d’autres serveurs virtuels au sein du contexte de flux. En outre, les connexions SSL peuvent être terminées de manière conditionnelle en fonction des noms de serveur ou des protocoles, tandis que le trafic restant est acheminé par proxy vers une autre destination. Cela ouvre de nouvelles possibilités de configuration pour gérer le trafic à partir d’un point de terminaison unique.
L’extrait de configuration suivant met fin aux connexions SSL dans le module stream et les transmet, selon le nom de serveur demandé, au contexte http ou à un autre serveur virtuel du contexte stream.
http {
server {
listen 8000;
location / {
return 200 foo;
}
}
}
stream {
map $ssl_server_name $pass_port {
foo.example.com 8000;
default 9001;
}
server {
listen 9000 ssl;
ssl_certificate domain.crt;
ssl_certificate_key domain.key;
pass 127.0.0.1:$pass_port;
}
server{
listen 9001;
return bar\n;
}
}Dans cet exemple, toutes les connexions SSL sont terminées au niveau du bloc serveur stream. Selon le nom du serveur indiqué dans la requête entrante, les connexions sont transmises soit au serveur http à l’écoute sur le port 8000, soit au serveur virtuel stream à l’écoute sur le port 9001.
Une autre application du module concerne les cas d’utilisation dans lesquels un module tiers ne prend pas en charge la terminaison SSL. Dans ce type de scénario, le module stream_pass peut mettre fin aux connexions chiffrées par TLS avant de les transmettre au module tiers.
Cet exemple montre comment le module RTMP, qui ne prend pas nativement en charge SSL, peut utiliser le module stream_pass pour accepter du trafic chiffré par TLS.
rtmp {
server {
listen 1935;#rtmp
application foo{
live on;
}
}
}
stream {
server {
listen 1936 ssl; #rtmps
ssl_certificate domain.crt;
ssl_certificate_key domain.key;
pass 127.0.0.1:1935;
}
}Dans cet extrait de configuration, la connexion SSL est terminée dans le bloc serveur stream, puis transmise à rtmp. La connexion apparaît comme non chiffrée pour le module RTMP, ce qui évite toute personnalisation supplémentaire ou surcharge de traitement nécessaire à la prise en charge des connexions SSL.
Images de conteneurs NGINX Plus
NGINX Plus R32 propose officiellement des images de conteneur NGINX Plus permettant une exécution de NGINX Plus avec ou sans privilèges. Ces deux types de conteneurs sont également disponibles avec une installation facultative de NGINX Agent, afin de faciliter la connexion aux plateformes de gestion prises en charge par NGINX. Les images peuvent être téléchargées depuis le registre NGINX, à l’adresse suivante : private-registry.nginx.com. Suivez ces instructions pour accéder à l’image à l’aide de votre certificat et de votre clé NGINX Plus, ou d’un jeton Web JSON (JWT).
Autres améliorations et corrections de bogues dans NGINX Plus R32
Correction d’un bug dans le module MQTT
- Paquets mal formés lors de l’utilisation des propriétés par défaut : Cette version corrige un problème entraînant la création de paquets mal formés dans le module Message Queuing Telemetry Transport (MQTT), introduit dans NGINX Plus R29. Auparavant, lorsque le champ des propriétés était présent et contenait les 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 indiquant la longueur des propriétés (1 octet). La longueur du paquet était donc inférieure de 1 octet à celle attendue, ce qui entraînait la création d’un paquet mal formé. Ce correctif apporté dans R32 résout ce problème.
Correction d’un bug dans le module zone_sync
- Fuite de mémoire lors du rechargement de la configuration : Auparavant, les opérations de synchronisation de la file d’attente utilisaient des maillons de chaîne alloués à partir d’un pool distinct qui n’était jamais libéré. Cela entraînait des fuites de mémoire dans le processus maître ainsi que dans tous les processus de travail. Le correctif de cette version rétablit une implémentation antérieure de la synchronisation des zones, qui utilise un pool de cycle pour la file d’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 de HTTP3/QUIC.
- Dépassement de tas avec écriture (CVE-2024-32760) : Des instructions non divulguées de l’encodeur HTTP/3 peuvent entraîner l’arrêt des processus de travail NGINX ou avoir d’autres conséquences potentielles.
- Dépassement de pile/utilisation après libération (CVE-2024-31079) : Des requêtes HTTP/3 non divulguées peuvent entraîner l’arrêt des processus de travail NGINX ou avoir d’autres conséquences. Cette attaque nécessite qu’une requête soit envoyée à un moment précis pendant le processus de fermeture progressive de la connexion, sur lequel l’attaquant n’a aucune visibilité et ne peut exercer qu’une influence limitée.
- Déréférencement de pointeur nul avec un en-tête vide (CVE-2024-35200) : Des requêtes HTTP/3 non divulguées peuvent entraîner l’arrêt des processus de travail NGINX ou avoir d’autres conséquences possibles.
- Divulgation de mémoire lors de l’établissement de la connexion QUIC (CVE-2024-34161) : lorsque l’infrastructure réseau prend en charge une unité de transmission maximale (MTU) d’au moins 4 096 sans fragmentation, des messages QUIC non divulgués peuvent entraîner l’arrêt des processus de travail NGINX ou la divulgation de données provenant d’une zone 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 changements fonctionnels, des fonctionnalités et des corrections de bogues apportés depuis la sortie de NGINX Plus R31 (dans NGINX 1.25.4 et 1.25.5).
Fonctionnalités :
- Serveurs virtuels dans le module stream.
- 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 des lignes 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 pour Windows.
- Fermeture inattendue de la connexion lors de l’utilisation du 0-RTT avec QUIC.
- Les connexions comportant des opérations AIO en attente peuvent être fermées prématurément lors de l’arrêt progressif des anciens processus de travail.
- Les alertes de fuite de sockets ne sont plus consignées lorsqu’un arrêt rapide est demandé après l’arrêt progressif 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) pouvait se produire si l’AIO était utilisé dans une sous-requête.
- Une erreur de segmentation pouvait se produire dans un processus de travail si le proxy SSL était utilisé conjointement avec la directive « image_filter » et que les erreurs de code 415 étaient redirigées à l’aide de la directive « error_page ».
- Corrections de bugs et améliorations de 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 obtenir la liste complète des nouveautés, fonctionnalités, corrections de bugs et solutions de contournement héritées des versions récentes, consultez le fichier changes de NGINX.
Modifications apportées au module JavaScript de NGINX
NGINX Plus R32 intègre les modifications apportées par la version 0.8.4 du module NGINX JavaScript (njs). Voici une liste des principales modifications apportées à njs depuis la version 0.8.2 (qui était celle fournie avec NGINX Plus R31).
Fonctionnalités
- Fonctionnalité : l’en-tête Server peut être défini pour les réponses sortantes.
- Fonctionnalité : prise en charge du moteur QuickJS dans l’interface en ligne de commande.
Modifications
- Amélioration : validation des arguments URI et args dans r.subrequest().
- Amélioration : vérification de la présence de variables js_set en double.
Corrections de bugs
- Correction de bug : correction de Headers.set().
- Correction de bug : correction de js_set avec des valeurs Buffer.
- Correction de bug : correction de la méthode clear() d’un dictionnaire partagé lorsqu’aucun délai d’expiration n’est spécifié.
- Correction de bug : correction des statistiques stub_status lorsque js_periodic est activé.
- Correction de bug : correction de la compilation avec libxml2 2.12 et versions ultérieures.
- Correction de bug : correction du constructeur Date en cas de dépassement de capacité et de valeurs NaN.
- Correction de bug : correction d’un dépassement de capacité par le bas dans querystring.parse().
- Correction de bug : correction d'une lecture potentielle au-delà des limites du tampon dans String.prototype.match().
- Correction de bug : correction de l’analyse syntaxique des boucles for-in.
- Correction de bug : correction de l’analyse syntaxique des littéraux hexadécimaux, octaux et binaires ne comportant aucun chiffre.
- Correction de bug : correction de la méthode clear() d’un dictionnaire partagé sans délai d’expiration, introduite dans la version 0.8.3.
- Correction de bug : correction de la méthode r.send() d’un dictionnaire partagé sans délai d’expiration lorsqu’un argument Buffer est utilisé.
- Correction de bug : correction de atob() avec des chaînes base64 sans remplissage.
Pour obtenir la liste complète des fonctionnalités, modifications et corrections de bugs, consultez le journal des modifications de njs.
Mettez à niveau ou essayez NGINX Plus
Si vous utilisez NGINX Plus, nous vous recommandons vivement de passer à NGINX Plus R32 dès que possible. Outre toutes les nouvelles fonctionnalités proposées, vous bénéficierez également de plusieurs correctifs et améliorations supplémentaires, ce qui permettra à NGINX de mieux vous aider si vous devez ouvrir un ticket auprès du support.
Si vous n’utilisez pas encore NGINX Plus, nous vous invitons à l’essayer. Vous pouvez l’utiliser pour sécuriser vos applications, répartir la charge et mettre en place une passerelle API, ou comme serveur web entièrement pris en charge, doté d’API avancées de supervision et de gestion. Commencez dès aujourd’hui avec un essai gratuit de 30 jours.
À propos de l’auteur
Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.
Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.
Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.
Caches partagés avec les clusters de cache NGINX Plus, partie 1
Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.
Introduction aux microservices
Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.