Nous sommes heureux d'annoncer que NGINX Plus Release 19 (R19) est désormais disponible. NGINX Plus est le seul équilibreur de charge, cache de contenu, serveur Web et passerelle API tout-en-un . Basé sur NGINX Open Source, NGINX Plus inclut des fonctionnalités améliorées exclusives et un support primé. L’objectif principal de cette version est la surveillance, avec de nouvelles fonctionnalités qui la rendent plus granulaire et flexible, pour une fiabilité améliorée de vos applications à grande échelle.
Les nouvelles fonctionnalités de NGINX Plus R19 incluent :
d'emplacement
, de nouvelles mesures sur l'activité de recherche DNS et la prise en charge de l'exportation au format Prometheus ainsi qu'au format JSON. Le tableau de bord NGINX Plus affiche les nouvelles mesures par emplacement et comporte de nouveaux onglets pour les mesures DNS et les mesures sur les clusters NGINX Plus.API obsolètes – NGINX Plus R13 (sorti en août 2017) a introduit la toute nouvelle API NGINX Plus pour la collecte de métriques et la reconfiguration dynamique des groupes en amont, remplaçant les API Status et Upstream Conf qui implémentaient auparavant ces fonctions. Comme annoncé à l'époque, les API obsolètes ont continué à être disponibles et prises en charge pendant une période significative, qui a pris fin avec NGINX Plus R16 . Si votre configuration inclut les directives status
et/ou upstream_conf
, vous devez les remplacer par la directive api
dans le cadre de la mise à niveau vers R19.
Pour obtenir des conseils et de l'aide sur la migration vers la nouvelle API NGINX Plus , veuillez consulter le guide de transition sur notre blog ou contacter notre équipe d'assistance.
Nouveaux systèmes d’exploitation pris en charge –
Les anciens systèmes d’exploitation ne sont plus pris en charge –
Pour plus d'informations sur les plates-formes prises en charge, consultez les spécifications techniques de NGINX Plus et des modules dynamiques .
NGINX Plus R19 rend la surveillance encore plus flexible, en étendant à la fois les types de mesures que vous pouvez collecter et les façons dont vous pouvez les analyser.
L' API NGINX Plus fournit une large gamme de mesures de surveillance en temps réel, y compris plusieurs compteurs sur un serveur virtuel lorsque vous incluez la directive status_zone
dans son bloc server{}
. Avec NGINX Plus R19, vous pouvez désormais collecter des métriques pour des blocs d'emplacement
individuels en plus (ou à la place) du bloc parent server{}
, en ajoutant la directive status_zone
à ces blocs d'emplacement
. Cette surveillance plus fine vous permet de détecter plus rapidement les parties exactes de votre site Web qui génèrent des erreurs, pour un dépannage plus efficace.
La configuration suivante permet la collecte de métriques pour un site Web entier, ainsi que pour toutes les demandes adressées aux URI commençant par /admin/ .
Vous pouvez ensuite accéder aux métriques au point de terminaison http/location_zones .
$ curl http://localhost:8080/api/5/http/location_zones { "www_admin": { "requests": 3393, "réponses": { "1xx": 0, « 2xx » : 3307, « 3xx » : 81, « 4xx » : 5, « 5xx » : 0, "totale" : 3393 }, "rejeté": 0, "reçu" : 15403, « envoyé » : 835227 } }
Il est également possible de placer la directive status_zone
dans un bloc if
, mais notez que les métriques ne sont comptées qu'une seule fois pour un emplacement donné, et à partir de la dernière directive status_zone
rencontrée pendant le traitement de la requête. La configuration suivante étend l'exemple précédent en collectant des métriques distinctes chaque fois qu'une demande à l'emplacement /admin/ inclut une chaîne de requête.
L' API NGINX Plus a également été étendue avec des mesures permettant de suivre l'activité de recherche DNS, en particulier sur les types de requêtes DNS et les statuts de réponse. Pour collecter des métriques sur un groupe de serveurs DNS que NGINX Plus interroge pour les recherches de noms, ajoutez le paramètre status_zone
à la directive resolver
.
Vous pouvez ensuite accéder aux métriques au niveau du point de terminaison des résolveurs .
$ curl http://localhost:8080/api/5/resolvers { "internal_dns": { "requests": { "name": 132, « srv » : 0, "adresse": 0 }, "réponses": { "noerror": 130, "ancien": 0, « servfail » : 0, "nxdomaine": 0, "non imp": 0, "refusé" : 0, « expiration du délai » : 2, « inconnu » : 0 } } }
Le tableau de bord de surveillance des activités en direct de NGINX Plus fournit un emplacement centralisé pratique pour le suivi des mesures collectées par l' API NGINX Plus . Le tableau de bord a été étendu dans NGINX Plus R19 pour inclure le nouveau résolveur et les mesures par emplacement décrites ci-dessus. En outre, il signale désormais des métriques relatives au partage de l'état d'exécution dans un cluster (comme activé avec le module de synchronisation de zone ), qui n'étaient auparavant accessibles que via l' API NGINX Plus .
Il y a deux onglets renommés et deux nouveaux onglets :
d'emplacement
ainsi que sur les blocs de serveur
.Pour explorer le nouveau tableau de bord, visitez https://demo.nginx.com/ .
L' API NGINX Plus renvoie des métriques au format JSON, qui est un format courant et pratique pour l'intégration avec des solutions de surveillance externe et de gestion des performances des applications (APM). Vous pouvez désormais également exporter des métriques au format Prometheus, particulièrement populaire dans les environnements Kubernetes.
Le module Prometheus-njs expose les métriques Prometheus. Pour activer les métriques exportées :
Configurez un emplacement dédié pour la collecte des métriques Prometheus dans le fichier de configuration NGINX Plus.
scrape_config
du fichier de configuration Prometheus.NGINX Plus offre une approche très flexible de la limitation du débit. Plusieurs limites de débit peuvent être suivies et appliquées simultanément. L’application elle-même se décline en cinq formes différentes – notamment le report des demandes excessives, leur rejet pur et simple et l’autorisation d’une série de demandes sans restriction avant l’application – ainsi que des combinaisons de ces comportements. Pour une explication détaillée, consultez notre blog .
Bien que cette flexibilité puisse permettre une limitation de débit très précise, comment déterminer en premier lieu la limite de débit appropriée pour votre trafic ? Comment pouvez-vous savoir à l’avance si votre limite de débit prévue est trop élevée (auquel cas vos serveurs peuvent être surchargés) ou trop basse (auquel cas l’expérience utilisateur peut être affectée) ?
La meilleure source d'informations est le journal des erreurs NGINX Plus, où une entrée détaillée comme celle-ci est créée lorsque NGINX Plus retarde ou rejette une demande :
2019/09/03 11:42:12 [erreur] 57#57 : *339 limitation des demandes, excès : 0,600 par zone "my_limit", client : 172.17.0.1, serveur : www.exemple.com, requête : "GET / HTTP/1.1", hôte : "www.exemple.com:80"
L'entrée vous indique des informations utiles telles que le nombre de requêtes par milliseconde au-dessus du taux configuré que représente cette requête (le champ excédentaire
), la limite particulière qui a été dépassée (le champ zone
) et l'adresse IP du client (le champ client
). Mais ces informations ne sont utiles à des fins de planification que si vous pouvez les obtenir avant d'appliquer les limites de votre trafic.
NGINX Plus R19 ajoute cette capacité prédictive avec un mode « dry-run » pour la limitation du débit. Les entrées de journal sont créées normalement, mais les limites de débit ne sont pas appliquées. Pour activer le mode d’exécution à sec, incluez la nouvelle directive limit_req_dry_run
dans le même bloc que la ou les directives limit_req
.
Dans l'exemple suivant, les directives limit_req_zone
définissent quatre limites de débit différentes, de 10 000 requêtes par seconde à 10 requêtes par seconde. Nous appliquons ces tarifs avec les directives limit_req
dans le bloc d’emplacement
racine (lignes 9 à 12), ainsi que la directive limit_req_dry_run
pour désactiver l’application.
NGINX Plus écrit une entrée de journal, clairement marquée avec un run
à sec
, pour chaque demande qui dépasserait une limite de débit donnée. Dans notre analyse du journal, nous pouvons ensuite filtrer les entrées par le champ de zone
pour déterminer laquelle des limites de débit nous donne le comportement souhaité.
2019/09/03 11:56:26 [erreur] 142#142 : *22282 requêtes de limitation, exécution à sec , excès : 1.000 par zone "1000rs", client : 172.17.0.1, serveur : www.exemple.com, requête : "GET / HTTP/1.1", hôte : "www.exemple.com:80"
Avec le magasin clé-valeur en mémoire pour NGINX Plus, vous pouvez utiliser l’ API NGINX Plus pour configurer dynamiquement la gestion du trafic en fonction des attributs de la demande. Les exemples de cas d’utilisation incluent la liste de refus dynamique des adresses IP , la limitation dynamique de la bande passante et la mise en cache des jetons d’authentification .
NGINX Plus R19 étend le magasin clé-valeur en ajoutant la prise en charge des plages de réseaux IP (sous-réseaux) à la prise en charge existante des adresses IP individuelles. Cela signifie qu'une seule entrée dans le magasin clé-valeur peut correspondre à toutes les adresses IP d'une plage réseau, ce qui simplifie la configuration et vous fait gagner du temps car vous n'avez pas à ajouter individuellement les adresses qui composent une plage. Le magasin clé-valeur utilise la notation CIDR pour représenter les plages réseau. Par exemple, 192.168.13.0/24 représente les adresses 192.168.13.0 à 192.168.13.255. Les adresses et plages IPv4 et IPv6 sont prises en charge.
Pour activer les plages réseau, incluez le nouveau paramètre type=ip
à la directive keyval_zone
, comme dans la configuration suivante pour la liste de refus dynamique des adresses IP. Lorsque NGINX Plus effectue une recherche, toute adresse IP dans une plage réseau stockée dans le magasin clé-valeur renvoie une correspondance.
La ligne 2 spécifie que la variable $in_denylist
est évaluée en effectuant une recherche dans le magasin de clés-valeurs de la liste de refus , en utilisant $remote_addr
(l'adresse IP du client) comme clé. Le bloc if
simple (lignes 8 à 10) rejette alors une demande lorsque l’adresse IP du client est dans la liste de refus.
La commande curl
suivante appelle l’ API NGINX Plus pour créer une entrée dans le magasin clé-valeur pour la plage réseau mentionnée ci-dessus.
$ curl -X POST -d '{"192.168.13.0/24":"1"}' http://localhost:8080/api/5/http/keyvals/denylist
Dans la section précédente, le paramètre timeout=24h
de la directive keyval_zone
sur la ligne 1 de denylist.conf signifie que chaque entrée dans le magasin de clés-valeurs de la liste de refus expire (et est supprimée du magasin) 24 heures après sa création.
Avec NGINX Plus R19 , vous pouvez remplacer le délai d'expiration par défaut (défini pour l'ensemble du magasin clé-valeur par le paramètre timeout
) par un délai d'expiration différent pour chaque entrée individuelle. Les délais d'expiration individuels peuvent être plus grands ou plus petits que la valeur par défaut.
Pour créer une entrée avec un délai d’expiration autre que celui par défaut, fournissez la valeur sous forme d’objet JSON avec deux champs :
valeur
– Régler sur la valeur souhaitée, dans ce cas1
pour remplir la variable $in_denylist
expire
– Définit le nombre de millisecondes après la création duquel la valeur expireLe JSON suivant représente une entrée de liste de refus pour localhost (127.0.0.1) qui expire dans 1 heure (3 600 000 millisecondes).
{
"127.0.0.1": {
"valeur": "1",
"expire" : 3600000
}
}
La commande curl
suivante crée cette entrée dans le magasin clé-valeur :
$ curl -X POST -d '{"127.0.0.1":{"valeur": "1", "expiration":3600000}}' http://localhost:8080/api/5/http/keyvals/denylist
La directive limit_rate
définit le débit (nombre d'octets par seconde) auquel NGINX Plus envoie la réponse à une requête HTTP, et la directive limit_rate_after
définit le nombre d'octets que NGINX Plus envoie avant que cette limite ne soit appliquée. Avec NGINX Plus R19 , le paramètre de chaque directive peut être une variable plutôt qu'une valeur statique, permettant un contrôle dynamique de l'utilisation de la bande passante en fonction des attributs de la demande.
L'exemple de configuration suivant définit la bande passante en fonction de la version de TLS utilisée par le client, récompensant ainsi efficacement les navigateurs plus modernes avec des réponses plus rapides.
Dans les versions précédentes de NGINX Plus, vous pouviez limiter la bande passante en définissant la variable $limit_rate
; nous vous recommandons plutôt d'utiliser cette méthode plus simplifiée. Pour plus de détails, consultez la documentation de la directive limit_rate
.
Les directives proxy_download_rate
et proxy_upload_rate
pour le trafic TCP/UDP acceptent désormais également un paramètre variable.
Pour une limitation de bande passante encore plus sophistiquée, vous pouvez utiliser des extensions de script telles que le module JavaScript NGINX (njs) pour implémenter une logique avancée et personnalisée permettant de déterminer la limite de bande passante appropriée pour une connexion donnée.
Le module JavaScript NGINX (njs) a été mis à jour vers la version 0.3.5 . Les améliorations les plus notables (cumulatives des versions précédentes) sont :
de processus
global (particulièrement utile pour lire les variables d'environnement)String.prototype.trim
Si vous utilisez NGINX Plus, nous vous encourageons vivement à effectuer une mise à niveau vers NGINX Plus R19 dès que possible. Vous bénéficierez également d'un certain nombre de correctifs et d'améliorations supplémentaires, et cela aidera NGINX à vous aider lorsque vous aurez besoin de créer un ticket d'assistance.
Veuillez examiner attentivement les nouvelles fonctionnalités et les changements de comportement décrits dans cet article de blog avant de procéder à la mise à niveau.
Si vous n'avez pas essayé NGINX Plus, nous vous encourageons à l'essayer - pour la sécurité, l'équilibrage de charge et la passerelle API, ou en tant que serveur Web entièrement pris en charge avec des API de surveillance et de gestion améliorées. Vous pouvez commencer dès aujourd’hui avec une évaluation gratuite de 30 jours . Découvrez par vous-même comment NGINX Plus peut vous aider à fournir et à faire évoluer vos applications.
« 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."