Nous sommes heureux d’annoncer la disponibilité de NGINX Plus Release 31 (R31). Basé sur NGINX Open Source, NGINXPlus 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 R31 incluent :
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.
Note: Si vous effectuez une mise à niveau à partir d'une version autre que NGINX Plus R30, 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.
Le module OpenTracing qui a été introduit dans NGINX Plus R18 est désormais obsolète. Il est prévu qu'il soit supprimé à partir de la future version de NGINX Plus R34. Le package sera disponible avec toutes les versions de NGINX Plus d'ici là. Il est fortement conseillé d'utiliser le module OpenTelemetry qui a été introduit dans NGINX Plus R29.
Les utilisateurs de NGINX Plus sont tenus de signaler leur utilisation de NGINX à F5 à des fins de conformité. Avec la sortie de NGINX Plus R31, la possibilité de signaler votre utilisation de NGINX à NGINX Instance Manager est nativement présente et est activée par défaut. Un message d'avertissement est enregistré si l'instance NGINX n'est pas en mesure de fournir ses informations d'utilisation à NGINX Instance Manager pour une raison quelconque.
Reportez-vous à la section Rapports d’utilisation natifs de NGINX pour plus de détails sur la configuration de cette fonctionnalité dans votre environnement.
Nouveaux systèmes d’exploitation pris en charge :
Anciens systèmes d’exploitation supprimés :
Les anciens systèmes d'exploitation sont obsolètes et leur suppression est prévue dans NGINX Plus R32 :
NGINX Plus R31 introduit une communication native avec NGINX Instance Manager sur votre réseau pour automatiser la conformité des licences. Si vous participez au programme de consommation F5 Flex , vous n'aurez plus besoin de suivre manuellement vos instances NGINX Plus.
Par défaut, NGINX Plus tentera de découvrir NGINX Instance Manager au démarrage via une recherche DNS du nom d'hôte nginx-mgmt.local
. Bien que le nom d'hôte soit configurable, nous suggérons (pour plus de simplicité) d'ajouter un enregistrement A à votre DNS local, en associant le nom d'hôte par défaut à l'adresse IP du système exécutant NGINX Instance Manager. NGINX Plus établira ensuite une connexion TLS à NGINX Instance Manager, signalant son numéro de version, son nom d'hôte et son identifiant unique toutes les trente minutes.
Pour une couche de sécurité supplémentaire, nous vous suggérons également de provisionner cette connexion avec mTLS en utilisant le bloc de configuration de gestion
facultatif. À un rythme régulier, NGINX Instance Manager signalera ensuite l'utilisation totale des instances NGINX Plus à un service F5.
Vous verrez un message d'avertissement dans votre journal des erreurs si NGINX Plus rencontre des problèmes lors de la résolution du nom d'hôte nginx-mgmt.local
ou de la communication avec NGINX Instance Manager.
Voici un exemple de message d'erreur indiquant que l'instance NGINX Plus ne parvient pas à résoudre nginx-mgmt.local
:
2023/12/21 21:02:01 [warn] 3050#3050 : rapport d'utilisation : hôte introuvable résolvant le point de terminaison « nginx-mgmt.local »
Et voici un exemple de message d'erreur indiquant que l'instance NGINX Plus rencontre des difficultés de communication avec NGINX Instance Manager :
2023/12/21 21:02:01 [warn] 3184#3184 : rapport d'utilisation : délai de connexion expiré
gestion
Si vous préférez affiner la manière dont votre instance NGINX Plus communique avec NGINX Instance Manager, vous pouvez choisir d'utiliser le nouveau bloc de configuration de gestion
et les directives associées. Cela vous permet de définir un résolveur personnalisé, d’utiliser une adresse IP ou un nom d’hôte alternatif pour identifier votre système NGINX Instance Manager, de spécifier les options TLS, d’utiliser mTLS pour une sécurité renforcée et de spécifier d’autres paramètres personnalisés.
Voici un exemple de configuration personnalisée :
mgmt {
usage_report endpoint=instance-manager.local interval=30m;
resolver 192.168.0.2; # Exemple d'adresse IP DNS interne
uuid_file /var/lib/nginx/nginx.id;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers DEFAULT;
ssl_certificate client.pem;
ssl_certificate_key client.key;
ssl_trusted_certificate trust_ca_cert.crt;
ssl_verify on;
ssl_verify_depth 2;
}
Pour plus de détails sur ces directives, veuillez consulter la documentation du produit .
Pour plus d'informations sur le téléchargement et l'installation de NGINX Instance Manager, consultez le guide d'installation .
Note: Si vous utilisez une version antérieure de NGINX Plus, vous pouvez toujours signaler vos instances en suivant ces instructions .
Avant cette version, NGINX Plus supposait que tous les serveurs d’un groupe en amont étaient identiques. Cela signifie qu'ils devaient pouvoir répondre aux mêmes requêtes, répondre au même nom SNI (lorsque proxy_ssl_server_name
est utilisé) et renvoyer des certificats SSL correspondant au même nom.
Il existe cependant des scénarios dans lesquels ce comportement n’est pas suffisant. Par exemple, si plusieurs serveurs virtuels sont partagés derrière un serveur en amont et doivent être distingués par un SNI et/ou un en-tête d'hôte différent pour acheminer les requêtes vers des ressources spécifiques. Il est également possible que le même certificat ne puisse pas être utilisé sur tous les serveurs du groupe en amont ou qu’il existe des limitations pour placer les serveurs en amont dans des groupes en amont distincts.
NGINX Plus R31 introduit la prise en charge de la configuration SNI par serveur en amont. La variable $upstream_last_server_name
fait référence au nom du serveur en amont sélectionné, qui peut ensuite être transmis au serveur proxy à l'aide des directives proxy_ssl_server_name
et proxy_ssl_name
.
Voici comment définir proxy_ssl_server_name
sur on , permettant à un nom de serveur de passer via SNI :
proxy_ssl_server_name activé ;
Et voici comment transmettre le nom du serveur en amont sélectionné à l'aide de proxy_ssl_name
:
nom_proxy_ssl
$upstream_last_server_name;
NGINX JavaScript v0.8.1 a introduit une nouvelle directive js_periodic
qui est disponible dans les contextes http
et stream
. Cette directive permet de spécifier un gestionnaire de contenu JavaScript à exécuter à intervalles réguliers. Cela est utile dans les cas où le code personnalisé doit être exécuté à intervalles réguliers et peut nécessiter l'accès aux variables NGINX. Le gestionnaire de contenu reçoit un objet de session comme argument et a également accès aux objets globaux.
Par défaut, le gestionnaire de contenu s'exécute sur le processus de travail 0, mais il peut être configuré pour s'exécuter sur des processus de travail spécifiques ou sur tous les processus de travail.
Cette directive est disponible dans le contexte de localisation
:
example.conf :
location @periodics {
# à exécuter à des intervalles de 15 minutes dans les processus de travail 1 et 3
js_periodic main.handler interval=900s worker_affinity=0101 ;
resolver 10.0.0.1 ;
js_fetch_trusted_certificate /path/to/certificate.pem ;
}
example.js :
gestionnaire(s) de fonctions asynchrones {
let reply = wait ngx.fetch('https://nginx.org/en/docs/njs/');
let body = wait reply.text();
ngx.log(ngx.INFO, body);
}
Pour les détails de syntaxe et de configuration, veuillez vous référer à la documentation JavaScript de NGINX .
Dans les scénarios où une configuration NGINX contient un nombre élevé d’« emplacements », le temps de démarrage de votre NGINX peut prendre un temps considérable. Dans de nombreux cas, cela pourrait ne pas être acceptable. Le problème fondamental réside dans l’algorithme de tri utilisé pour trier la liste des emplacements.
NGINX R31 introduit une amélioration qui remplace l'algorithme de tri existant du tri par insertion , qui a une complexité temporelle de O(n2)
, au tri par fusion avec une complexité temporelle de O(n*log n)
.
Dans une configuration de test avec 20 000 emplacements, il a été observé que le temps de démarrage total était réduit de 8 secondes à 0,9 seconde après cette mise à jour.
NGINX Plus R31 introduit plusieurs améliorations et optimisations de performances dans l'implémentation QUIC+HTTP/3, telles que :
Les optimisations de performances supplémentaires incluent la réduction des retards potentiels lors de l'envoi de paquets d'accusé de réception, le placement des trames d'accusé de réception (ACK) en tête de la file d'attente pour réduire les retransmissions de trames et les retards de livraison des trames ACK, ainsi que des améliorations du comportement de contrôle de congestion en mode de déchargement de segmentation générique (GSO).
de gestion
supplémentaireDans NGINX Plus R31, ngx_mgmt_module
vous permet de signaler les informations d'utilisation de NGINX à NGINX Instance Manager. Ces informations incluent le nom d’hôte NGINX, la version NGINX et un identifiant d’instance unique.
Le module fournit plusieurs directives pour affiner la manière dont votre instance NGINX communique avec NGINX Instance Manager. Pour une liste complète des directives et options de configuration disponibles, reportez-vous à la documentation NGINX .
La prise en charge de Message Queuing Telemetry Transport (MQTT) a été introduite dans NGINX Plus R29 et cette version contient quelques correctifs de bogues pour les problèmes observés dans le module MQTT.
Un correctif important résout un problème de rejet des messages CONNECT lorsqu’un mot de passe n’était pas fourni. Auparavant, nous nous attendions inconditionnellement à ce que le champ du nom d'utilisateur soit suivi d'un mot de passe. Il existe cependant des cas particuliers dans la spécification MQTT – comme l’authentification anonyme – où la fourniture d’un mot de passe n’est pas obligatoire. Le correctif vérifie conditionnellement si le mot de passe est attendu ou non en regardant le champ cflags
du paquet. Si le drapeau n'est pas défini, cela implique que le mot de passe n'est pas obligatoire.
Un autre correctif de bogue arrête l'analyse des messages MQTT CONNECT lorsque la longueur du message est inférieure au nombre d'octets reçus.
des jetons de serveur
HTTP/3 avec des variablesNGINX Plus R31 ajoute la prise en charge des variables server_tokens
manquantes pour les connexions HTTP/3. Le champ de chaîne
peut être utilisé pour définir explicitement la signature sur les pages d'erreur et la valeur du champ d'en-tête de réponse « Serveur ». Si le champ chaîne est vide, cela désactive l'émission du champ « Serveur ».
NGINX Plus R31 est basé sur NGINX Open Source 1.25.3 et hérite des modifications fonctionnelles, des fonctionnalités et des corrections de bogues apportées depuis la sortie de NGINX Plus R30 (dans NGINX 1.25.2 et 1.25.3).
TLS_AES_128_CCM_SHA256
lors de l'utilisation de HTTP/3 – Cette amélioration ajoute la prise en charge de TLS_AES_128_CCM_SHA256
à QUIC, qui est actuellement la seule suite de chiffrement non prise en charge par l'implémentation NGINX QUIC. Il est désactivé par défaut dans OpenSSL et peut être activé avec cette directive : ssl_conf_command Ciphersuites TLS_AES_128_CCM_SHA256 ;
nginx
appName lors du chargement des configurations OpenSSL – Lors de l'utilisation de l'interface OPENSSL_init_ssl()
, au lieu de vérifier OPENSSL_VERSION_NUMBER
, NGINX teste désormais si OPENSSL_INIT_LOAD_CONFIG
est défini et vrai. Cela garantit que l'interface n'est pas utilisée avec BoringSSL et LibreSSL, car ils ne fournissent pas de paramètres d'initialisation de bibliothèque supplémentaires (notamment l'appel OPENSSL_INIT_set_config_appname()
).O(n*log n)
. Cela crée une meilleure expérience de démarrage NGINX , en particulier lorsqu'il y a un très grand nombre d'« emplacements » dans la configuration.http2_max_concurrent_streams
. Elle est appliquée même si le seuil maximal de flux simultanés autorisés n'est jamais atteint pour tenir compte des cas où les flux sont réinitialisés immédiatement après l'envoi des requêtes.client_header_buffer_size
qui n’a pas de réservation d’état. Cela a provoqué un problème où le tampon pouvait être écrasé lors de l'enregistrement de l'état. Le correctif actuel permet de lire uniquement la taille de tampon disponible au lieu de la taille de tampon fixe. Ce bug est apparu pour la première fois dans la version principale de NGINX 1.25.1 (NGINX Plus R30).Statut : 404
était valide selon la spécification Common Gateway Interface (CGI) mais a perdu l'espace de fin lors de l'analyse. Cela a généré une ligne d'état HTTP/1.1 404
dans la réponse, ce qui viole la spécification HTTP en raison d'un espace de fin manquant. Avec ce correctif de bogue, seul le code d'état est utilisé à partir de ces lignes d'en-tête d'état courtes, donc NGINX générera la ligne d'état elle-même avec l'espace et la phrase de raison appropriée si disponible.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 NGINX CHANGES .
NGINX Plus R31 intègre les modifications du module NGINX JavaScript (njs) version 0.8.2. Voici la liste des changements notables dans njs depuis la version 0.8.0 (qui faisait partie de la version NGINX Plus R30).
error()
, info()
, log()
, time()
, timeEnd()
et warn()
.js_periodic
pour http
et stream
qui permet de spécifier un gestionnaire JS à exécuter à intervalles réguliers.items()
implémentée d'un dictionnaire partagé . Cette méthode renvoie toutes les paires clé-valeur non expirées.existsSync()
ajoutée.parse()
.RegExp.prototype.exec()
avec expression régulière globale (regexp) et entrée Unicode.size()
et keys()
d'un dictionnaire partagé .r.internalRedirect()
qui a été introduite dans la version 0.8.0.Object.getOwnPropertyNames()
.items()
fixe pour un dictionnaire partagé.Pour une liste complète de toutes les fonctionnalités, modifications et corrections de bogues, consultez le journal des modifications njs.
Si vous utilisez NGINX Plus, nous vous encourageons vivement à effectuer une mise à niveau vers NGINX Plus R31 dès que possible. En plus de toutes ces nouvelles fonctionnalités intéressantes, vous bénéficierez également de plusieurs correctifs et améliorations supplémentaires, et le fait d'être à jour aidera NGINX à vous aider si vous devez ouvrir un ticket d'assistance.
Si vous n’avez pas essayé NGINX Plus, nous vous encourageons à le découvrir. 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."