Aujourd'hui, nous publions NGINX 1.19, la dernière version de NGINX Open Source, le serveur Web le plus populaire sur Internet . Cette version marque le lancement de la branche de développement NGINX 1.19, suite à la sortie de la branche stable NGINX 1.18 le mois dernier.
Dans ce blog, nous discutons du schéma de gestion des versions NGINX, revenons sur ce qui s'est passé pendant le cycle de développement de NGINX 1.17 et attendons avec impatience ce qui nous attend avec NGINX 1.19.
Chez NGINX, nous maintenons deux branches dans le référentiel de code Open Source NGINX, nommées mainline et stable :
Pour NGINX Open Source, le mot « stable » fait référence à la fonctionnalité et à la fréquence de mise à jour, et non à la qualité du logiciel. La branche stable ne reçoit jamais de nouvelles fonctionnalités au cours de son cycle de vie et reçoit généralement seulement une ou deux mises à jour, pour les corrections de bogues critiques.
La branche stable a un cycle de vie annuel. Chaque mois d'avril, nous retirons la branche stable actuelle, après quoi aucune autre correction de bug n'est effectuée. Cela déclenche deux événements :
NGINX Plus , la version commerciale de NGINX, est conservée dans un référentiel de code privé distinct. Il est toujours basé sur la dernière version de la ligne principale NGINX, fusionnée avec les fonctionnalités et capacités propriétaires supplémentaires de NGINX Plus. Au moment de la rédaction de cet article, la dernière version est NGINX Plus R21 , basée sur NGINX 1.17.10.
Nous recommandons généralement d'utiliser la branche principale. C'est ici que nous intégrons toutes les nouvelles fonctionnalités, améliorations des performances et perfectionnements. Nous testons et contrôlons activement la qualité de la branche principale et, en tant que source des builds NGINX Plus, elle est parfaitement adaptée à une utilisation en production.
Si vous êtes préoccupé par les frais généraux liés à la surveillance de la branche principale pour les nouvelles fonctionnalités et les corrections de bogues, alors l'utilisation de la branche stable signifie que vous n'avez besoin d'examiner les nouvelles fonctionnalités qu'une fois par an et les corrections de bogues de manière peu fréquente.
Le cycle de développement de NGINX 1.17 a introduit de nouvelles fonctionnalités et améliorations, notamment des améliorations du taux de requête et de la limitation de connexion dans ngx_http_limit_req_module et ngx_http_limit_conn_module respectivement, l'ajout d'une directive de retard d'authentification à ngx_http_core_module , l'introduction de la prise en charge des variables pour la directive grpc_pass
et des variables qui capturent l' adresse et le port du serveur avec le protocole PROXY, et bien plus encore. Avant d'examiner plus en détail les améliorations les plus importantes, voici NGINX 1.17, en chiffres :
Les directives limit_rate
et limit_rate_after
contrôlent la bande passante (débit en octets par seconde) à laquelle NGINX répond aux requêtes. Dans NGINX 1.17.0 et versions ultérieures, le paramètre qui définit le débit peut être une variable, ce qui permet un contrôle dynamique basé sur les attributs de la demande. Pour un exemple, voir Contrôle dynamique de la bande passante .
NGINX 1.17.1 a ajouté un mode d'exécution à sec pour la limitation du taux de requêtes, avec la directive limit_req_dry_run
. En mode d'exécution à sec, NGINX Plus n'applique pas de limites de débit, mais suit toujours le taux de demandes excessives dans la zone de mémoire partagée et écrit une entrée dans le journal des erreurs pour chaque demande qui dépasse la limite configurée. Cela vous permet de déterminer plus facilement quelle limite de débit est appropriée aux modèles de trafic sur votre site. Pour plus de détails, voir Test des limites de débit en mode d'exécution à sec .
Pour rendre le mode d'exécution à sec encore plus utile, NGINX 1.17.6 a ajouté la variable $limit_req_status
, qui peut être incluse dans les entrées du journal d'accès pour capturer l'effet de la limitation du débit sur le traitement des requêtes, en particulier si une requête :
PASSED
]RETARDÉ
]REJETÉ
]DELAYED_DRY_RUN
]REJECTED_DRY_RUN
]NGINX 1.17.6 a également ajouté un mode d'exécution à sec pour la limitation de connexion avec la directive limit_conn_dry_run
et la variable $limit_conn_status
pour capturer lorsqu'une demande de connexion :
PASSED
]REJETÉ
]REJECTED_DRY_RUN
]Pour un exemple de configuration, voir Améliorations apportées à la limitation de connexion .
auth_delay
La directive auth_delay
(ajoutée dans NGINX 1.17.10) permet le traitement différé des requêtes non autorisées, avec un code d'état 401
(Non autorisé)
retourné au client. Cela empêche les attaques temporelles lors du traitement des demandes d'accès. Les méthodes d’authentification disponibles incluent :
grpc_pass
La prise en charge native du trafic gRPC a été ajoutée dans NGINX 1.13.10, y compris la directive grpc_pass
, qui spécifie les serveurs auxquels NGINX transmet les requêtes gRPC. Dans NGINX 1.17.8, nous avons ajouté la possibilité d'inclure des noms de domaine dans l'identifiant du serveur, pour prendre en charge la recherche parmi les groupes de serveurs en amont . Si le nom de domaine n'est pas trouvé, NGINX utilise un résolveur pour identifier les adresses de serveur.
Le protocole PROXY permet à un proxy de couche 4 de fournir des informations client d'origine au prochain proxy ou équilibreur de charge gérant la demande. Ceci est important pour les cas d'utilisation où vous devez connaître l'adresse IP du client, par exemple pour limiter le nombre de connexions pour chaque client (à l'aide de la directive least_conn
). Ces données sont disponibles dans la variable $proxy_protocol_addr
( HTTP | Stream ).
Lorsque plusieurs proxys de couche 4 sont déployés, il peut être important pour NGINX de connaître l'adresse IP et le port du serveur proxy auquel le client s'est initialement connecté. Les métadonnées du protocole PROXY incluent ces informations et NGINX 1.17.6 a ajouté les variables suivantes aux modules HTTP et Stream pour les capturer :
Note: Les variables ne sont renseignées que si vous incluez également le paramètre proxy_protocol
à la directive listen
pour activer la gestion du protocole PROXY.
proxy_upload_rate
et proxy_download_rate
Les directives proxy_upload_rate
et proxy_download_rate
du module Stream contrôlent la vitesse à laquelle NGINX lit les données d'un client ou d'un serveur proxy, respectivement. Dans NGINX 1.17.0 et versions ultérieures, les directives acceptent un paramètre variable, vous permettant de définir des taux spécifiques aux conditions.
ioctl(FIONREAD)
Dans les systèmes Linux, l'appel système ioctl()
fournit le nombre d'octets lisibles à partir du périphérique hôte. NGINX 1.17.5 a ajouté ioctl(FIONREAD)
pour empêcher la boucle lorsque les données sont ajoutées au tampon de socket plus rapidement que NGINX ne peut les lire et les traiter. Lorsque le noyau ne fournit pas le nombre d'octets disponibles, nous pouvons utiliser ioctl(FIONREAD)
pour obtenir ces informations à partir d'un tampon rempli.
internal_redirect
de PerlDans NGINX 1.17.2 et versions ultérieures, le paramètre uri
de la fonction internal_redirect
dans le module NGINX Perl peut être un URI échappé ou un emplacement nommé.
La première version de la ligne principale NGINX 1.19 arrive très bientôt. NGINX 1.19.0 inclut la prise en charge de QUIC (HTTP/3), la prochaine mise à jour importante des protocoles de transport pour la communication entre les clients et les sites Web, les applications et les API.
Si vous souhaitez tester les fonctionnalités améliorées de NGINX Plus, démarrez votre essai gratuit de 30 jours dès aujourd'hui ou contactez-nous pour discuter de vos cas d'utilisation .
« 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."