BLOG | NGINX

Annonce de NGINX Plus R30

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Prabhat Dixit
Prabhat Dixit
Publié le 15 août 2023

Nous sommes heureux d’annoncer la disponibilité de NGINX Plus Release 30 (R30). 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 R30 incluent :

  • Prise en charge native de QUIC+HTTP/3 NGINX Plus dispose désormais d’un support officiel pour HTTP/3. L'implémentation ne dépend pas de bibliothèques tierces pour fournir la fonctionnalité OpenSSL TLS manquante requise pour fournir la prise en charge HTTP/3 sur le protocole QUIC. Il utilise une couche de compatibilité OpenSSL développée par l'équipe NGINX pour contourner les défis liés aux interfaces QUIC TLS qui ne sont pas prises en charge par OpenSSL.
  • Télémétrie de connexion par travailleur La surveillance des connexions au niveau de chaque travailleur est désormais prise en charge. Cela permet aux utilisateurs d'affiner les performances de NGINX en régulant le nombre de processus de travail et en répartissant efficacement les connexions entre les travailleurs pour des performances optimales.
  • Pack de diagnostic Le pack de diagnostic NGINX collecte toutes les données nécessaires au dépannage dans un seul fichier compressé. Cela améliore la communication entre les utilisateurs de NGINX Plus et le support F5, augmentant l'efficacité et réduisant le délai de résolution des problèmes.

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 R29, 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.

Abandon de la directive listen … http2

La directive listen … http2 est obsolète dans NGINX 1.25.1. La vérification de la configuration NGINX à l'aide de nginx -t donne un avertissement à cet effet.  

nginx -t

nginx : [warn] la directive « listen ... http2 » est obsolète, utilisez plutôt la directive « http2 » dans etc/nginx/nginx.conf :15

nginx : la syntaxe du fichier de configuration /etc/nginx/nginx.conf est correcte

nginx : le test du fichier de configuration /etc/nginx/nginx.conf est réussi

Il est fortement conseillé à tous les utilisateurs existants de cette directive de mettre à niveau NGINX et d'utiliser la directive http2, qui active HTTP/2 sur une base par serveur.

Changer ceci:

écouter 443 ssl http2;

À ceci :

écouter 443 ssl ;
http2 activé ;

Indisponibilité du module GeoIP2 sur Amazon Linux 2

Les versions précédentes de NGINX Plus utilisaient la bibliothèque « libmaxminddb » du référentiel EPEL d'Amazon Linux 2 pour créer le module GeoIP2 . Le référentiel EPEL ne fournit plus cette bibliothèque et n'est pas accessible nativement depuis la distribution Amazon Linux 2. Par conséquent, le module n'est plus disponible dans NGINX Plus R30 car il n'existe aucun moyen réalisable de le créer pour Amazon Linux 2.

Modifications des directives MQTT

La directive mqtt_rewrite_buffer_size , qui est utilisée pour spécifier la taille du tampon pour construire les messages MQTT, a été remplacée par la directive mqtt_buffers . La nouvelle directive permet de spécifier le nombre de tampons pouvant être alloués par connexion, ainsi que de spécifier la taille de chaque tampon.

Version API mise à jour

Le numéro de version de l'API NGINX Plus a été mis à jour de 8 à 9 pour refléter l'ajout des mesures par travailleur décrites dans Télémétrie de connexion par travailleur . Les numéros de version précédents fonctionnent toujours, mais la sortie n'inclut pas les métriques ajoutées dans les versions ultérieures de l'API.

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

Nouveaux systèmes d’exploitation pris en charge :

  • Debian 12
  • Alpine 3.18

Anciens systèmes d’exploitation supprimés :

  • Alpine 3.14, qui a atteint la fin de vie (EOL) le 1er mai 2023
  • Ubuntu 18.04, qui a atteint la fin de vie le 26 avril 2023

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

  • Alpine 3.15, dont la fin de vie est prévue en novembre 2023

Nouvelles fonctionnalités en détail

Prise en charge native de QUIC+HTTP/3

HTTP/3 sur QUIC est une fonctionnalité très attendue, demandée par bon nombre de nos clients d'entreprise, et nous sommes ravis de la présenter officiellement dans NGINX Plus R30. Il s’agit d’une nouvelle technologie et d’une nouvelle implémentation sur lesquelles nous continuerons de nous concentrer dans les versions futures. Nous conseillons aux utilisateurs de NGINX Plus de l'essayer d'abord dans un environnement non productif et de partager avec nous tout commentaire utile.

NGINX Plus s'appuie sur OpenSSL pour la communication sécurisée et la fonctionnalité cryptographique, en utilisant les bibliothèques SSL/TLS fournies avec les systèmes d'exploitation. Cependant, étant donné que les interfaces TLS de QUIC ne sont pas prises en charge par OpenSSL au moment de cette version, des bibliothèques tierces sont nécessaires pour fournir la fonctionnalité TLS manquante requise par HTTP/3.

Pour répondre à cette préoccupation, l’équipe NGINX a développé une couche de compatibilité OpenSSL , supprimant ainsi le besoin de créer et de livrer des bibliothèques TLS tierces telles que quictls, BoringSSL et LibreSSL. Cela permet de gérer l'expérience QUIC+HTTP/3 de bout en bout dans NGINX sans le fardeau d'une implémentation TLS personnalisée ni la dépendance aux calendriers et aux feuilles de route des bibliothèques tierces. Nous prévoyons d'améliorer la couche de compatibilité OpenSSL dans les prochaines versions avec davantage de fonctionnalités et d'options, telles que la prise en charge de 0-RTT.

Voici la configuration QUIC+HTTP/3 :
   

http {
        log_format quic '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" "$http3"';
        journal d'accès logs/access.log quic;

       server {
            # pour une meilleure compatibilité, il est recommandé
            # d'utiliser le même port pour quic et https
            listen 8443 quic reuseport;
            listen 8443 ssl;

            ssl_certificate     certs/example.com.crt;
            ssl_certificate_key certs/example.com.key;

           emplacement / {
                # requis pour que les navigateurs les dirigent vers le port rapide
               add_header Alt-Svc 'h3=":8443"; ma=86400';
            }
        }
    }

La prise en charge QUIC+HTTP/3 dans NGINX Plus R30 est disponible sous la forme d'un binaire unique, contrairement à la prise en charge expérimentale HTTP/3 introduite dans NGINX Plus R29 , qui disposait d'un binaire distinct pour nginx quic. Cette amélioration facilite le déploiement de la fonctionnalité dans votre environnement.

Note: Avec NGINX Plus R30, nous mettons fin au support et aux mises à jour du binaire QUIC autonome et prévoyons de le supprimer en tant qu'option de téléchargement plus tard cette année.

Télémétrie de connexion par travailleur

Les utilisateurs de NGINX Plus peuvent désormais surveiller le nombre total de connexions par processus de travail afin d'ajuster de manière adéquate la directive worker_connections . Cette amélioration donne aux utilisateurs une meilleure visibilité sur la manière dont les connexions sont réparties entre les travailleurs. La possibilité de régler les connexions des travailleurs vous aide également à mieux évaluer votre déploiement NGINX.

Les métriques de connexion par travailleur sont disponibles via l'API REST. Pour récupérer les métriques de connexion par travailleur, utilisez le point de terminaison …/api/9/workers .

Pour récupérer les métriques de connexion par travailleur pour un travailleur individuel, utilisez le point de terminaison .../api/9/workers/< worker id > . L' ID du travailleur a un index basé sur 0.

Voici un exemple de réponse :

{
      {
          "identifiant": 0,
        "pid": 2346,
        "connexions": {
            "accepté": 1,
             "abandonné" : 0,
             "actif" : 1,
             « inactif » : 0
        },
        "http": {
            "requêtes": {
                "total": 15,
                 « actuel » : 1
            }
        }
    },
    {
        "id": 1,
        « pid » : 1234,
        "connexions": {
            "accepté": 3,
             "abandonné" : 0,
             "actif" : 1,
             « inactif » : 0
        },
        "http": {
            "requêtes": {
                "total": 15,
                 « actuel » : 1             }         }     },     ... }

Les mesures de connexion par travailleur sont disponibles dans le tableau de bord de surveillance des activités en direct de NGINX Plus , comme indiqué ci-dessous. Accédez à une démonstration en direct de cette fonctionnalité sur demo.nginx.com.

Tableau de bord de surveillance des activités en direct de NGINX Plus affichant les informations ci-dessous sur les connexions et les demandes de NGINX Plus

Le tableau de bord affiche les informations ci-dessous sur les connexions et les demandes NGINX Plus.

Relations:

  • Connexions acceptées par travailleur
  • Connexions actives par travailleur
  • Connexions inactives par travailleur
  • Connexions abandonnées par travailleur

Demandes :

  • Demandes actuelles par travailleur
  • Nombre total de demandes par travailleur
  • Requêtes/sec par travailleur

Paquet de diagnostic

Pour réduire le délai de résolution des problèmes, le package de diagnostic rationalise le processus de collecte des données nécessaires à la résolution des problèmes dans votre environnement NGINX. Le package de diagnostic permet également d'éviter les divergences et les retards associés à la demande et à la collecte manuelles des informations nécessaires à la résolution des problèmes, rendant ainsi l'interaction entre les clients NGINX Plus et le support F5 plus efficace.

Le package de diagnostic collecte :

  • Informations NGINX – Version NGINX Plus, configurations, informations sur les processus, modules tiers, journaux, statistiques et points de terminaison de l'API
  • Informations système – Commandes de l’hôte ( ps , lsof , vmstat , etc.)
  • Informations sur les servicessystemd , etc.
  • Agent NGINX – Journaux et configurations (si présents)
  • NGINX App Protect – Journaux et configurations (le cas échéant)
  • Journal du package de support – Journal contenant une liste de tous les fichiers collectés

Notre objectif avec l'ajout du package de diagnostic est d'être transparent avec les utilisateurs sur les commandes exécutées par le script dans le package et sur les données collectées. Consultez la page du package de diagnostic NGINX Plus pour plus d’informations.

Note: La disponibilité du package de diagnostic est annoncée dans le cadre de la version actuelle de NGINX Plus R30, mais le package de diagnostic ne dépend pas réellement de la version. À l’avenir, nous prévoyons de le mettre à jour en fonction de vos commentaires et de ceux du support F5 dans le but d’améliorer le processus de collecte de données de dépannage.

Autres améliorations de NGINX Plus R30

Optimisations MQTT

Grâce aux améliorations apportées à la consommation de mémoire du module de filtre Message Queuing Telemetry Transport (MQTT), le débit est désormais multiplié par 4 à 5.

La directive mqtt_rewrite_buffer_size a été supprimée. Au lieu de cela, la nouvelle directive mqtt_buffers <num> <taille> a été introduit pour spécifier le nombre de tampons que le module peut allouer par connexion, ainsi que la taille de chaque tampon. Le nombre de tampons par défaut est de 100 et la taille par défaut de chaque tampon est de 1024 octets, ce qui rend la valeur par défaut de la variable mqtt_buffers <100> <1024> .

Optimisations du rechargement DNS

NGINX Plus préserve désormais les délais d'expiration des noms DNS pour les hôtes en amont résolus dynamiquement lors des rechargements, supprimant ainsi le besoin de nouvelle résolution lors du rechargement de la configuration. Avant cette mise à jour, les résolutions DNS étaient déclenchées pour tous les flux en amont. Avec cette mise à jour, NGINX préserve les résolutions DNS et les délais d'expiration pour tous les flux en amont et déclenche les résolutions DNS uniquement pour les flux en amont nouveaux ou modifiés lors du rechargement.

Cette optimisation sera particulièrement efficace pour les environnements NGINX contenant un grand nombre d’hôtes en amont. Si vous avez 100 hôtes en amont ou plus dans votre configuration NGINX, les optimisations seront les plus évidentes.

Modifications héritées de NGINX Open Source

NGINX Plus R30 est basé sur NGINX Open Source 1.25.1 et hérite des modifications fonctionnelles, des fonctionnalités et des corrections de bogues apportées depuis la sortie de NGINX Plus R29 (dans NGINX 1.25.0 et 1.25.1).

Changements

  • La prise en charge du push du serveur HTTP/2 a été supprimée. Le protocole HTTP/2 server_push a connu une adoption minimale et ne pouvait être utilisé que dans des cas d'utilisation très limités. (Selon la documentation de référence IETF 102, il a été utilisé dans seulement 0,04 % des sessions. Conformément à la RFC 913, il était « difficile de l’utiliser efficacement ». Le push du serveur HTTP/2 a été désactivé dans la version 106 de Chrome . Dans le cadre de ce changement, les directives http2_push , http2_push_preload et http2_max_concurrent_pushes sont devenues obsolètes.
  • La directive SSL obsolète n'est plus prise en charge. La directive ssl a été obsolète dans NGINX 1.15.0 et remplacée par le paramètre ssl de la directive listen. La directive SSL obsolète a désormais été supprimée.
  • Comme mentionné ci-dessus, la directive listen … http2 est obsolète. Il est conseillé aux utilisateurs d’utiliser plutôt la directive http2 .
    • Pour les connexions SSL avec OpenSSL v1.0.2h ou supérieur, si le protocole HTTP/2 est activé sur le serveur virtuel choisi par une identification de nom de serveur (SNI), il est automatiquement sélectionné par le rappel de négociation du protocole de couche d'application (ALPN).
    • Pour les anciennes versions d'OpenSSL, le protocole HTTP/2 est activé en fonction de la configuration du serveur virtuel par défaut.
    • Pour les connexions TCP simples, HTTP/2 est désormais détecté automatiquement par la préface HTTP/2 s'il est activé sur le serveur virtuel par défaut. Si la préface ne correspond pas, HTTP/0.9-1.1 est supposé.
  • La prise en charge de HTTP/2 sur Cleartext TCP (h2c) et HTTP/1.1 sur le même socket d'écoute est ajoutée. Dans l'implémentation existante, si un utilisateur configure un socket d'écoute h2c (par exemple, listen port_num http2 ), seules les connexions HTTP/2 peuvent être créées. Un socket d'écoute h2 prend en charge HTTP/1.1 et HTTP/2 avec négociation du protocole via ALPN. Cependant, dans l'implémentation existante, les clients HTTP/1.1 échouent sur le socket, empêchant l'utilisation de HTTP Upgrade comme moyen de négocier le protocole. Cette modification permet la prise en charge simultanée de HTTP/1.1 et HTTP/2 sur un socket TCP simple lors de l'utilisation de HTTP/2.
  • La prévention d'un éventuel dépassement de tampon avec certains $sent_http_* est activée. Un défaut dans la logique d'évaluation des variables multi-en-têtes $sent_http_ entraînait des dépassements de tampon potentiels lorsque certains éléments étaient effacés mais restaient dans la liste chaînée. Ce problème s'est manifesté lorsque des modules tiers ont été utilisés pour remplacer les valeurs multi-en-têtes. La mise à jour introduit des contrôles de limites affinés, garantissant une manipulation et une évaluation plus sûres de ces variables.

Caractéristiques

  • La prise en charge complète de HTTP/3 est ajoutée. La version principale de NGINX 1.25.0 a introduit la prise en charge de HTTP/3, et cette prise en charge a été fusionnée dans NGINX Plus R30. L'implémentation de NGINX Plus R30 présente les modifications suivantes par rapport aux packages expérimentaux fournis dans NGINX Plus R29 :
  •  
    • Directive quic_mtu supprimée
    • Paramètre http3 supprimé de la directive d'écoute
    • Suppression de la prise en charge QUIC du module de flux
    • Suppression du push du serveur HTTP/3
    • Correction de la construction de la couche de compatibilité OpenSSL avec OpenSSL 3.2+

Correction de bug

  • Erreur de segmentation corrigée si une expression régulière (regex) étudie l'allocation de liste échoue.

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 .

Modifications apportées au module JavaScript NGINX

NGINX Plus R30 intègre les modifications du module NGINX JavaScript (njs) version 0.8.0.

Caractéristiques

  • Propriétés NGINX globales introduites :
    ngx.build , ngx.conf_file_path , ngx.error_log_path , ngx.prefix , ngx.version , ngx.version_number et ngx.worker_id .
  • Introduction de la directive js_shared_dict_zone pour http et stream qui permet de déclarer un dictionnaire partagé entre les processus de travail.
  • Méthodes de tableau compatibles ES13 ajoutées : Tableau.from(), Tableau.prototype.toSorted(), Tableau.prototype.toSpliced(), Tableau.prototype.toReversed() .
  • Méthodes TypedArray compatibles ES13 ajoutées : %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed() .
  • Ajout des propriétés CryptoKey dans l'API WebCrypto . Ces propriétés ont été ajoutées : algorithm, extractable, type, usages .

Changements

  • Suppression du traitement spécial des en-têtes interdits dans l' API Fetch introduit dans0.7.10 .
  • Suppression de r.requestBody() du module http, qui était obsolète dans la version 0.5.0. La propriété r.requestBuffer ou r.requestText doit être utilisée à la place.
  • Suppression de r.responseBody() du module http qui était obsolète dans la version 0.5.0. La propriété r.responseBuffer ou r.responseText doit être utilisée à la place.
  • Lancer une exception dans r.internalRedirect() lors du filtrage dans le module http .
  • Les méthodes natives sont fournies avec l'argument retval . Ce changement rompt la compatibilité avec l'extension C pour njs nécessitant la modification du code.
  • Les méthodes String obsolètes non conformes ont été supprimées. Les méthodes suivantes ont été supprimées : String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(encodage) .
  • Suppression de la prise en charge de la construction avec GNU readline.

Corrections de bugs

  • Correction du paramètre r.status lors du filtrage dans le module http .
  • Paramètre fixe de l'en-tête d'emplacement dans le module http .
  • Correction de la valeur de retour de сrypto.getRandomValues() .
  • Évaluation fixe des noms de propriétés calculées avec des expressions de fonction.
  • Nom implicite fixe pour une expression de fonction déclarée dans des tableaux.
  • Analyse fixe des boucles for-in.
  • Date.parse() fixe avec le format ISO-8601 et le décalage horaire UTC.

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