La branche principale de nginx 1.25.3 a été publiée, au sein de laquelle le développement de nouvelles fonctionnalités se poursuit. La branche stable 1.24.x maintenue en parallèle ne contient que des modifications liées à l'élimination de bugs et de vulnérabilités graves. À l'avenir, sur la base de la branche principale 1.25.x, une branche stable 1.26 sera formée. Le code du projet est écrit en C et distribué sous licence BSD.
Parmi les changements :
- La protection contre l'activité anormale des clients HTTP/2 a été renforcée, et en particulier contre les attaques DoS de la classe « Rapid Reset », dans lesquelles un grand nombre de threads immédiatement réinitialisés sont créés au sein d'une seule connexion HTTP/2. Dans la configuration par défaut, ces attaques sont limitées par la limite du nombre de requêtes par connexion « keepalive_requests » (après 1000 requêtes, la connexion sera réinitialisée) et les restrictions « limit_req ». Pour répondre plus tôt à l'inondation de requêtes via un grand nombre de threads, une limitation supplémentaire a été ajoutée qui ne permet pas la création de plus de 256 (2 * max_concurrent_streams) nouveaux threads par cycle de traitement d'événements par défaut. La nouvelle limite permet de commencer à bloquer les requêtes avant que la limite globale du nombre de threads simultanés ne soit atteinte, par exemple lorsque les threads sont traités de manière asynchrone ou sont vidés. Un changement similaire a également été inclus dans la version d'Angie 1.3.1 (nginx fork), publiée il y a une semaine.
- Gestion améliorée des tampons utilisés lors de la détection automatique des connexions HTTP/2.
- Les performances de lancement de configurations avec un grand nombre de directives « location » ont été améliorées.
- Correction d'un plantage de processus worker pouvant survenir lors de la tentative d'utilisation de HTTP/2 sans SSL.
- Correction du traitement incorrect de l'en-tête « Statut » renvoyé par le backend avec un texte explicatif vide.
- Correction d'une fuite de mémoire lors de la reconfiguration survenue lors de la construction avec la bibliothèque PCRE2.
- Une grande partie des correctifs et améliorations liés à la prise en charge du protocole HTTP/3 a été introduite.
Dans le même temps, njs 0.8.2, un interpréteur JavaScript pour serveur Web L'interpréteur njs implémente les standards ECMAScript et permet d'étendre les capacités de traitement des requêtes de nginx grâce à des scripts de configuration. Ces scripts peuvent être utilisés dans le fichier de configuration pour définir une logique de traitement avancée des requêtes, générer une configuration, générer dynamiquement des réponses, modifier les requêtes et les réponses, ou encore créer rapidement des stubs pour résoudre des problèmes dans les applications web. La nouvelle version ajoute un objet console, qui fournit les méthodes `error()`, `info()`, `log()`, `time()`, `timeEnd()` et `warn()`. La méthode `fs.existsSync()` a été ajoutée au module `fs`.
A noter également la publication du serveur d'applications NGINX Unit 1.31.1, qui propose une solution pour exécuter des applications web dans différents langages de programmation (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js et Java). NGINX Unit peut exécuter simultanément plusieurs applications dans différents langages de programmation, dont les paramètres de lancement peuvent être modifiés dynamiquement sans qu'il soit nécessaire de modifier les fichiers de configuration et de redémarrer. En plus des corrections de bugs, la nouvelle version du module Wasm permet de charger des données supérieures à 4 Go, et lors de la réponse, il est possible de définir des codes d'état HTTP.
Source: opennet.ru
