Après un an de développement, une nouvelle branche stable du serveur HTTP hautes performances et serveur proxy multiprotocole nginx 1.28.0 a été publiée, qui intègre les modifications accumulées dans la branche principale 1.27.x. À l'avenir, tous les changements apportés à la branche stable 1.28 seront liés à l'élimination d'erreurs et de vulnérabilités graves. Bientôt, la branche principale de nginx 1.29 sera formée, dans laquelle le développement de nouvelles fonctionnalités se poursuivra. Pour les utilisateurs ordinaires qui n'ont pas pour tâche d'assurer la compatibilité avec les modules tiers, il est recommandé d'utiliser la branche principale, sur la base de laquelle les versions du produit commercial Nginx Plus sont formées tous les trois mois.
Selon le rapport de mars de Netcraft, environ 245 millions de sites fonctionnent sous nginx (243 millions il y a un an, 289 millions il y a deux ans). Nginx est utilisé sur 17.89 % de tous les sites actifs (18.15 % il y a un an, 18.94 % il y a deux ans), ce qui correspond à la première place en popularité dans cette catégorie (la part d'Apache correspond à 16.03 % (20.09 % il y a un an, 20.52 % il y a deux ans), Cloudflare - 17.81 % (14.12 %, 11.32 %), Google - 9.89 % (10.41 %, 9.89 %).
En considérant tous les sites, nginx maintient son leadership et occupe 20.48% du marché (il y a un an 22.31%, il y a deux ans - 25.94%), tandis que la part d'Apache est de 16.03% (20.17%, 20.58%), Cloudflare - 12.87% (11.24%, 10.17%), OpenResty (une plateforme basée sur nginx et LuaJIT) - 9.36% (7.93%, 7.94%).
Parmi les millions de sites les plus visités au monde, nginx se classe deuxième avec une part de 20.37 % (il y a un an 20.63 %, il y a deux ans 21.37 %). Cloudflare occupe la première place avec 22.32 % (22.59 % il y a un an, 21.62 % il y a deux ans). La part d'Apache httpd est de 17.95 % (20.09 %, 21.18 %).
Selon W3Techs, nginx est utilisé sur 33.8 % du million de sites les plus visités (en avril de l'année dernière, ce chiffre était de 34.3 %, l'année précédente – 34.5 %). La part d'Apache est passée de 30.1% à 26.3% au cours de l'année, tandis que la part de Microsoft IIS est passée de 5% à 4%. La part de Node.js est passée de 3.2% à 4.4%, et la part de LiteSpeed de 12.9% à 14.6%.
Les améliorations les plus notables ajoutées lors du développement de la branche amont 1.27.x :
- Pour les connexions utilisant le protocole QUIC, la prise en charge de l'algorithme de contrôle de congestion du réseau CUBIC (RFC 9438) a été ajoutée, qui fonctionne en augmentant progressivement la taille de la fenêtre de congestion jusqu'à ce qu'une perte de paquets se produise, après quoi la taille de la fenêtre est ramenée à la valeur avant le début de la perte. Lors des tests réalisés, l'utilisation de CUBIC a permis de réduire le temps de transfert d'un fichier de 500 Mo de 24 % avec des retards de 40 ms et BDP 750K (Bandwidth Delay Product) et de 73 % avec des retards de 100 ms et BDP 9M.
- Le module de flux a ajouté la prise en charge de la vérification de la révocation des certificats clients à l'aide du protocole OCSP (Online Certificate Status Protocol).
- Le module de flux implémente la prise en charge de la technique de vérification de la révocation des certificats OCSP Stapling, dont l'essence est que lors de la négociation d'une connexion TLS, une réponse OCSP certifiée par l'autorité de certification est transmise par le serveur desservant le site, sans qu'il soit nécessaire de contacter directement le autorité de certification).
- La mise en cache est implémentée lors du démarrage et des mises à jour de configuration. Certificats SSL, clés et CRL (Liste de révocation des certificats).
- Fonctionnalités ajoutées pour réduire la consommation de ressources et la charge du processeur lors de l'utilisation de TLS dans des configurations avec un grand nombre de blocs de serveurs et d'emplacements. Les modifications ajoutées permettent, au lieu de créer un contexte SSL distinct (SSL_CTX dans OpenSSL) pour chaque bloc de configuration, d'utiliser le contexte SSL existant du bloc parent.
- La directive "ssl_client_certificate" prend en charge les certificats avec des informations supplémentaires.
- Pour vérifier les certificats SSL des clients, la directive "ssl_client_certificate" n'est plus requise.
- Ajout de la prise en charge du mode de connexion IMAP spécifique à SmarterMail avec une réponse CAPABILITY non balisée au module ngx_mail_proxy_module.
- La directive « proxy_pass_trailers » a été ajoutée au module ngx_http_proxy_module, permettant la transmission des champs d'en-tête en fin de réponse du serveur proxy vers le client.
- La directive « server » utilisée dans le bloc « upstream » a été mise à jour pour prendre en charge le paramètre « resolve », qui permet le suivi des modifications. Adresses IP pour le nom de domaine utilisé et la mise à jour automatique de la configuration du bloc « en amont » sans avoir besoin de redémarrer nginx si l'adresse change.
- Ajout de la possibilité d'utiliser des variables dans les directives « proxy_limit_rate », « fastcgi_limit_rate », « scgi_limit_rate » et « uwsgi_limit_rate ».
- Dans les directives "proxy_bind", "fastcgi_bind", "grpc_bind", "memcached_bind", "scgi_bind" et "uwsgi_bind", ainsi que dans une adresse client dans le ngx_http_realip_module, les adresses IPv6 entre crochets sans numéro de port sont autorisées.
- Ajout de la directive « keepalive_min_timeout », qui définit le délai pendant lequel nginx ne fermera pas la connexion keep-alive avec le client.
- Par défaut, les protocoles TLSv1 et TLSv1.1 sont désactivés.
- Problèmes résolus avec le chargement long des fichiers de configuration en raison de l'analyse répétée du même ensemble de certificats TLS, de clés et de listes d'autorités de certification. Amélioration des performances de rechargement de configuration en réutilisant des objets TLS inchangés tels que des certificats, des clés et des CRL. Pour désactiver l'héritage des objets lors de la mise à jour de la configuration, la directive « ssl_object_cache_inheritable » a été ajoutée.
- Cache ajouté pour les certificats et les clés chargés à l'aide de variables dans les directives (par exemple « ssl_certificate /etc/ssl/$ssl_server_name.crt »). Les directives « ssl_certificate_cache », « proxy_ssl_certificate_cache », « grpc_ssl_certificate_cache » et « uwsgi_ssl_certificate_cache » ont été ajoutées pour gérer le cache. Les directives spécifiées vous permettent de configurer la taille maximale du cache, la période de validité des enregistrements et le temps de nettoyage des enregistrements inutilisés. Par exemple : « ssl_certificate_cache max=1000 inactive=20s valid=1m; ».
- Consommation de mémoire réduite lors du traitement de requêtes de longue durée dans des configurations qui utilisent les directives « gzip », « gunzip », « ssi », « sub_filter » ou « grpc_pass ».
- La taille maximale des sessions SSL mises en cache dans la mémoire partagée a été augmentée à 8192.
- L'assemblage avec la bibliothèque Musl C a été établi.
- Des travaux ont été effectués pour optimiser les performances et éliminer les erreurs dans l’implémentation HTTP/3.
De plus, il convient de noter la publication de la version du projet FreeNginx 1.28.0, qui développe le fork Nginx. Le fork est développé par Maxim Dunin, l'un des principaux développeurs de Nginx. FreeNginx se positionne comme un projet à but non lucratif qui permet le développement de la base de code Nginx sans interférence des entreprises. Parmi les changements spécifiques de la branche FreeNginx 1.28 :
- Le paramètre « off » dans la directive « pid » désactive la création d'un fichier PID.
- Limiter l'intensité de l'écriture des messages dans le journal des erreurs pour éviter que le journal ne se remplisse de messages typiques.
- Implémentation du paramètre multipath dans la directive listen pour prendre en charge Multipath TCP.
- Prise en charge de l'en-tête HTTP « Age » pour définir la durée de vie des entrées de cache.
- Ajout des méthodes d'authentification XOAUTH2 et OAUTHBEARER au module mail_proxy.
Source: opennet.ru
