Après un an de développement, une nouvelle version stable du serveur HTTP haute performance et du proxy multi-protocole nginx 1.26.0 est publiée, intégrant les modifications accumulées dans la branche principale 1.25.x. À l'avenir, tous les changements dans la branche stable 1.26 seront axés sur la correction des bogues et des vulnérabilités sérieuses. Dans un proche avenir, la branche principale nginx 1.27 sera formée, poursuivant le développement de nouvelles fonctionnalités. Pour les utilisateurs ordinaires sans besoin d'assurer la compatibilité avec des modules tiers, il est recommandé d'utiliser la branche principale, sur laquelle des versions commerciales de Nginx Plus sont publiées tous les trois mois.
Selon le rapport de mars de Netcraft, environ 243 millions de sites (par rapport à 289 millions l'année dernière) fonctionnent sous nginx. Nginx est utilisé sur 18,15 % de tous les sites actifs (contre 18,94 % l'année dernière et 20,08 % il y a deux ans), ce qui en fait le deuxième serveur le plus populaire dans cette catégorie (la part d'Apache est de 20,09 % (20,52 % l'année dernière, 22,58 % il y a deux ans), Cloudflare - 14,12 % (11,32 %, 10,42 %), Google - 10,41 % (9,89 %, 8,89 %). En considérant tous les sites, nginx conserve sa position de leader avec une part de marché de 22,31 % (25,94 % l'année dernière, 31,13 % il y a deux ans), tandis que la part d'Apache est de 20,17 % (20,58 %, 23,08 %), Cloudflare - 11,24 % (10,17 %, 5,49 %), OpenResty (plateforme basée sur nginx et LuaJIT) - 7,93 % (7,94 %, 8,01 %).
Parmi le million de sites les plus visités au monde, la part de nginx s'élève à 20,63 % (il y a un an 21,37 %, il y a deux ans 21,79 %), Cloudflare à 22,59 % (il y a un an 21,62 %), et Apache httpd à 20,09 % (21,18 %). Selon les données de W3Techs, nginx est utilisé sur 34,3 % des sites parmi le million les plus visités, en avril de l'année dernière ce chiffre était de 34,5 %, et celui d'il y a deux ans était de 33,1 %. La part d'Apache a diminué en un an, passant de 32,2 % à 30,1 %, tandis que la part de Microsoft IIS a baissé de 5,6 % à 4,8 %. La part de Node.js a augmenté de 2,4 % à 3,2 %, et celle de LiteSpeed est passée de 11,8 % à 12,9 %.
Les améliorations les plus remarquables ajoutées lors de la formation de la branche principale 1.25.x :
- Le module ngx_http_v3 a été ajouté avec un support expérimental du protocole HTTP/3. L'option «—with-http_v3_module» est prévue pour compiler le module. HTTP/3 définit l'utilisation du protocole QUIC (Quick UDP Internet Connections) comme transport pour HTTP/2. QUIC est une superstructure au-dessus du protocole UDP, prenant en charge le multiplexage de plusieurs connexions et fournissant des méthodes de cryptage équivalentes à TLS/SSL. Le protocole a été créé en 2013 par Google en tant qu'alternative à l'association TCP+TLS pour le Web, résolvant les problèmes de temps d'établissement et de négociation des connexions en TCP et éliminant les délais causés par la perte de paquets lors de la transmission de données.
- Une directive distincte «http2» a été ajoutée pour activer sélectivement le protocole HTTP/2 en liaison avec les serveurs (peut être utilisée dans des blocs «server» séparés). Le paramètre «http2» dans la directive «listen» est déclaré obsolète.
- La protection contre l'activité anormale des clients HTTP/2 a été renforcée, notamment contre les attaques par déni de service de type «Rapid Reset», où un grand nombre de flux sont réinitialisés en même temps dans une seule connexion HTTP/2. Dans la configuration par défaut, de telles attaques se heurtent à la limite du nombre de requêtes par connexion «keepalive_requests» (après chaque 1000 requêtes, la connexion sera réinitialisée) et aux restrictions «limit_req». Pour une réaction plus rapide aux inondations de requêtes via de nombreux flux, une restriction supplémentaire a été ajoutée, empêchant par défaut la création de plus de 256 (2 * max_concurrent_streams) nouveaux flux par cycle de traitement des événements. La nouvelle restriction permet de commencer à bloquer les requêtes avant d'atteindre le plafond global du nombre de flux simultanés, par exemple, lorsque les flux sont traités de manière asynchrone ou réinitialisés.
- Le module de flux a ajouté le support serveurs virtuels, dont la configuration est définie dans le bloc «server { … }» à l'aide de la directive server_name. server { server_name ~^(www\.)?(.+)$; proxy_pass www.$2:12345; }
- Un nouveau module ngx_stream_pass_module a été ajouté, conçu pour rediriger les connexions reçues directement vers n'importe quel socket à l'écoute, relié à des modules tels que http, stream et mail. stream { server { listen 12345 ssl; ssl_certificate domain.crt; ssl_certificate_key domain.key; pass 127.0.0.1:8000; } }
- Dans la directive listen du module stream, le support des paramètres «deferred» (active le accept différé), «accept_filter» (filtre des connexions entrantes appliqué avant l'appel de la fonction accept) et «setfib» (définition de la table de routage) a été implémenté.
- Pour certaines architectures, la prise en charge de la définition de la taille du bloc (cache line) utilisée pour le transfert de données entre le cache du CPU et la mémoire a été mise en œuvre.
- La gestion des buffers utilisés lors de la détection automatique des connexions HTTP/2 a été améliorée.
- La performance de démarrage des configurations avec un grand nombre de directives « location » a été augmentée.
- La prise en charge de la technologie Server push dans HTTP/2 a été supprimée.
- Le support de la directive « ssl », précédemment déclarée obsolète, a été abandonné.
La version stable du projet FreeNginx 1.26.0, un fork de Nginx, a été publiée il y a deux semaines. Le développement du fork est dirigé par Maxim Dounine, l'un des développeurs clés de Nginx. FreeNginx est positionné comme un projet non commercial qui assure le développement de la base de code de Nginx sans intervention d'entreprises.
Source : opennet.ru
