Na een jaar van ontwikkeling is er een nieuwe stabiele tak van de krachtige HTTP-server en multi-protocol proxyserver nginx 1.28.0 gepubliceerd, waarin wijzigingen zijn samengevoegd die zijn verzameld in de hoofdversie 1.27.x. In de toekomst zullen alle wijzigingen in de stabiele tak 1.28 verband houden met het verhelpen van ernstige fouten en kwetsbaarheden. Binnenkort zal de hoofdversie nginx 1.29 worden gevormd, waarin de ontwikkeling van nieuwe mogelijkheden zal worden voortgezet. Voor gewone gebruikers, die geen compatibiliteit met externe modules hoeven te garanderen, wordt aangeraden om de hoofdversie te gebruiken, waarvan elke drie maanden nieuwe releases van het commerciële product Nginx Plus worden gemaakt.
Volgens het maartrapport van Netcraft draait nginx op ongeveer 245 miljoen websites (een jaar geleden 243 miljoen, twee jaar geleden 289 miljoen). Nginx wordt gebruikt op 17,89% van alle actieve websites (een jaar geleden 18,15%, twee jaar geleden 18,94%), wat overeenkomt met de eerste plaats in populariteit in deze categorie (het aandeel van Apache bedraagt 16,03% (een jaar geleden 20,09%, twee jaar geleden 20,52%), Cloudflare — 17,81% (14,12%, 11,32%), Google — 9,89% (10,41%, 9,89%).
Bij het bekijken van alle websites behoudt nginx de leiding en heeft een marktaandeel van 20,48% (een jaar geleden 22,31%, twee jaar geleden — 25,94%), terwijl het aandeel van Apache 16,03% bedraagt (20,17%, 20,58%), Cloudflare — 12,87% (11,24%, 10,17%), OpenResty (een platform gebaseerd op nginx en LuaJIT) — 9,36% (7,93%, 7,94%).
Onder de miljoen meest bezochte websites ter wereld staat nginx op de tweede plaats met een aandeel van 20,37% (een jaar geleden 20,63%, twee jaar geleden 21,37%). De eerste plaats wordt ingenomen door Cloudflare — 22,32% (een jaar geleden 22,59%, twee jaar geleden 21,62%). Het aandeel van Apache httpd bedraagt 17,95% (20,09%, 21,18%).
Volgens W3Techs wordt nginx gebruikt op 33,8% van de websites uit de miljoen meest bezochte (in april van vorig jaar was dit 34,3%, het jaar daarvoor 34,5%). Het aandeel van Apache is in een jaar tijd gedaald van 30,1% naar 26,3%, en het aandeel van Microsoft IIS is gedaald van 5% naar 4%. Het aandeel van Node.js is gestegen van 3,2% naar 4,4%, terwijl het aandeel van LiteSpeed is gestegen van 12,9% naar 14,6%.
De meest opvallende verbeteringen die zijn toegevoegd tijdens het vormen van de hoofdversie 1.27.x:
- Voor verbindingen die het QUIC-protocol gebruiken, is ondersteuning toegevoegd voor het algoritme CUBIC (RFC 9438) voor netwerkoverbelastingsbeheer. Dit algoritme vergroot geleidelijk de grootte van het congestievenster tot er pakketverlies optreedt, waarna de grootte van het venster terugvalt naar de waarde vóór het verlies. In uitgevoerde tests heeft het gebruik van CUBIC de overdrachtstijd van een bestand van 500 MB met 24% verminderd bij een vertraging van 40 ms en BDP 750K (Bandwidth Delay Product), en met 73% bij een vertraging van 100 ms en BDP 9M.
- In de stream-module is ondersteuning toegevoegd voor het controleren van klantcertificaatintrekkingen met het OCSP-protocol (Online Certificate Status Protocol).
- In de stream-module is ondersteuning voor OCSP Stapling geïmplementeerd. Dit houdt in dat bij het tot stand brengen van een TLS-verbinding het door de certificeringsinstantie geverifieerde OCSP-antwoord door de server wordt overgedragen, zonder dat er rechtstreeks contact met de certificeringsinstantie nodig is.
- Bij het opstarten en bijwerken van configuraties is caching geïmplementeerd SSL-certificaten, sleutels en CRL (Certificate Revocation List).
- Er zijn mogelijkheden toegevoegd om het resourceverbruik te verminderen en de belasting op de CPU te verlagen bij het gebruik van TLS in configuraties met een groot aantal server- en location-blokken. De toegevoegde wijzigingen maken het mogelijk om in plaats van voor elk configuratieblok een aparte SSL-context (SSL_CTX in OpenSSL) aan te maken, de bestaande SSL-context uit het bovenliggende blok te gebruiken.
- In de directive "ssl_client_certificate" is ondersteuning toegevoegd voor certificaten met aanvullende informatie.
- Voor de verificatie van klant-SSL-certificaten is de directive "ssl_client_certificate" nu niet verplicht.
- In de ngx_mail_proxy_module is ondersteuning toegevoegd voor de specifieke SmarterMail-modus IMAP LOGIN met een ongeëtiketteerd CAPABILITY-antwoord.
- In de ngx_http_proxy_module is de directive "proxy_pass_trailers" toegevoegd, die het mogelijk maakt om headervelden aan het einde van het antwoord van de proxyserver naar de client door te geven.
- In de directive "server", gebruikt in het "upstream"-blok, is ondersteuning toegevoegd voor de parameter "resolve", die het mogelijk maakt om wijzigingen te volgen IP-adressen voor de gebruikte domeinnaam en automatische configuratie-updates van het "upstream"-blok zonder dat er een herstart van nginx nodig is in geval van adreswijzigingen.
- De mogelijkheid om variabelen te gebruiken in de directieven "proxy_limit_rate", "fastcgi_limit_rate", "scgi_limit_rate" en "uwsgi_limit_rate" is toegevoegd.
- In de richtlijnen 'proxy_bind', 'fastcgi_bind', 'grpc_bind', 'memcached_bind', 'scgi_bind' en 'uwsgi_bind', evenals als klantadres in de ngx_http_realip_module, is het toegestaan om IPv6-adressen in vierkante haakjes op te geven zonder poortnummer.
- De richtlijn 'keepalive_min_timeout' is toegevoegd, die de timeout definieert waarin nginx de keep-alive verbinding met de client niet zal sluiten.
- TLSv1 en TLSv1.1 zijn standaard uitgeschakeld.
- Problemen met lange laadtijden van configuratiebestanden zijn opgelost door het heranalysieren van dezelfde set TLS-certificaten, sleutels en certificeringsinstantie-lijsten te verminderen. De herstart van de configuratie is versneld door het hergebruik van onveranderde TLS-objecten, zoals certificaten, sleutels en CRL. Een richtlijn 'ssl_object_cache_inheritable' is toegevoegd om de overerving van objecten bij het bijwerken van de configuratie uit te schakelen.
- Caching voor certificaten en sleutels die zijn geladen met variabelen in de richtlijnen (bijvoorbeeld 'ssl_certificate /etc/ssl/$ssl_server_name.crt') is toegevoegd. Om de cache te beheren, zijn de richtlijnen 'ssl_certificate_cache', 'proxy_ssl_certificate_cache', 'grpc_ssl_certificate_cache' en 'uwsgi_ssl_certificate_cache' toegevoegd. Met deze richtlijnen kan de maximale cachegrootte, de tijdsduur van records en de tijd voor het opschonen van ongebruikte records worden ingesteld. Bijvoorbeeld: 'ssl_certificate_cache max=1000 inactive=20s valid=1m;'.
- Het geheugenverbruik voor het verwerken van langdurige verzoeken in configuraties met de richtlijnen 'gzip', 'gunzip', 'ssi', 'sub_filter' of 'grpc_pass' is verminderd.
- De maximale grootte van in gedeeld geheugen opgeslagen SSL-sessies is verhoogd tot 8192.
- De bouw met de C-bibliotheek Musl is geoptimaliseerd.
- Er is gewerkt aan prestatie-optimalisatie en bugfixes in de implementatie van HTTP/3.
Ook kan de release van het FreeNginx-project 1.28.0 worden opgemerkt, dat een fork van Nginx ontwikkelt. De ontwikkeling van de fork wordt geleid door Maxim Dunin, een van de sleutelontwikkelaars van Nginx. FreeNginx wordt gepositioneerd als een nonprofitproject dat de ontwikkeling van de codebasis van Nginx zonder bedrijfsinterferentie waarborgt. Onder de specifieke veranderingen in de FreeNginx 1.28-tak:
- De parameter 'off' in de richtlijn 'pid' die het maken van PID-bestanden uitschakelt.
- Beperking van de intensiteit van het loggen van foutmeldingen om te beschermen tegen het vullen van het log met typische berichten.
- De implementatie van de parameter multipath in de richtlijn listen ter ondersteuning van Multipath TCP.
- Ondersteuning voor de HTTP-header "Age" om de levensduur van cache-items te bepalen.
- Toevoegen van de authenticatiemethoden XOAUTH2 en OAUTHBEARER aan de mail_proxy-module.
Bron: opennet.ru
