Po roku prac opublikowano nową stabilną wersję wysokowydajnego serwera HTTP i wieloprotokołowego serwera proxy nginx 1.26.0, która zawiera zmiany zgromadzone w głównej wersji 1.25.x. W przyszłości wszystkie zmiany w stabilnej wersji 1.26 będą dotyczyły usuwania poważnych błędów i luk w zabezpieczeniach. Wkrótce zostanie utworzona główna wersja nginx 1.27, w której będzie kontynuowany rozwój nowych funkcji. Zwykłym użytkownikom, którzy nie muszą zapewniać zgodności z zewnętrznymi modułami, zaleca się korzystanie z głównej wersji, na której co trzy miesiące powstają wydania komercyjnego produktu Nginx Plus.
Zgodnie z marowym raportem firmy Netcraft, pod zarządzaniem nginx działa około 243 miliony stron internetowych (rok temu 289 milionów). Nginx jest używany na 18,15% wszystkich aktywnych stron (rok temu 18,94%, dwa lata temu 20,08%), co odpowiada drugiemu miejscu pod względem popularności w tej kategorii (udział Apache wynosi 20,09% (rok temu 20,52%, dwa lata temu 22,58%), Cloudflare — 14,12% (11,32%, 10,42%), Google — 10,41% (9,89%, 8,89%). Przy tym, biorąc pod uwagę wszystkie strony, nginx zachowuje przewagę i zajmuje 22,31% rynku (rok temu 25,94%, dwa lata temu — 31,13%), podczas gdy udział Apache wynosi 20,17% (20,58, 23,08%), Cloudflare — 11,24% (10,17, 5,49%), OpenResty (platforma oparta na nginx i LuaJIT) — 7,93% (7,94%, 8,01%).
Wśród miliona najczęściej odwiedzanych stron na świecie, udział nginx wynosi 20,63% (rok temu 21,37%, dwa lata temu 21,79%), Cloudflare — 22,59% (rok temu 21,62%), Apache httpd — 20,09% (21,18%). Według danych W3Techs, nginx jest używany na 34,3% stron z miliona najczęściej odwiedzanych, w kwietniu ubiegłego roku wskaźnik ten wynosił 34,5%, a dwa lata temu — 33,1%. Udział Apache spadł w ciągu roku z 32,2% do 30,1%, a udział Microsoft IIS zmniejszył się z 5,6% do 4,8%. Udział Node.js wzrósł z 2,4% do 3,2%, a udział LiteSpeed z 11,8% do 12,9%.
Najbardziej zauważalne poprawki dodane w trakcie tworzenia głównej wersji 1.25.x:
- Dodano moduł ngx_http_v3 z eksperymentalnym wsparciem dla protokołu HTTP/3. Aby zbudować moduł, dostępna jest opcja „—with-http_v3_module”. HTTP/3 definiuje użycie protokołu QUIC (Quick UDP Internet Connections) jako transportu dla HTTP/2. QUIC jest rozszerzeniem protokołu UDP, obsługującym multiplexing wielu połączeń i zapewniającym metody szyfrowania równoważne z TLS/SSL. Protokół ten został stworzony w 2013 roku przez firmę Google jako alternatywa dla zestawu TCP+TLS dla sieci Web, rozwiązując problemy z długim czasem ustanawiania i negocjowania połączeń w TCP oraz eliminując opóźnienia przy utracie pakietów w procesie przesyłania danych.
- Dodano osobną dyrektywę „http2” do selektywnego włączania protokołu HTTP/2 w powiązaniu z serwerami (może być używana w oddzielnych blokach „server”). Parametr „http2” w dyrektywie „listen” został uznany za przestarzały.
- Wzmacniana jest ochrona przed anormalną aktywnością klientów HTTP/2, a w szczególności przed atakami DoS typu „Rapid Reset”, w których tworzona jest duża liczba natychmiast anulowanych strumieni w ramach jednego połączenia HTTP/2. W domyślnej konfiguracji takie ataki napotykają limit liczby żądań na połączenie „keepalive_requests” (po każde 1000 żądań połączenie będzie anulowane) oraz ograniczenia „limit_req”. Aby szybciej reagować na powodzie żądań przez dużą liczbę strumieni, dodano dodatkowe ograniczenie, które nie pozwala na tworzenie domyślnie więcej niż 256 (2 * max_concurrent_streams) nowych strumieni w każdej iteracji przetwarzania zdarzeń. Nowe ograniczenie pozwala na blokowanie żądań przed osiągnięciem ogólnego limitu liczby równoczesnych strumieni, na przykład, gdy strumienie są przetwarzane asynchronicznie lub anulowane.
- Dodano wsparcie dla modułu stream serwerów wirtualnych, której konfiguracja jest definiowana w bloku „server { … }” za pomocą dyrektywy server_name. server { server_name ~^(www\.)?(.+)$; proxy_pass www.$2:12345; }
- Dodano nowy moduł ngx_stream_pass_module, przeznaczony do przesyłania przychodzących połączeń bezpośrednio do dowolnego nasłuchującego gniazda, związanego z takimi modułami jak http, stream i mail. stream { server { listen 12345 ssl; ssl_certificate domain.crt; ssl_certificate_key domain.key; pass 127.0.0.1:8000; } }
- W dyrektywie listen modułu stream wprowadzono obsługę parametrów „deferred” (włącza opóźnione accept), „accept_filter” (filtr połączeń przychodzących stosowany przed wywołaniem funkcji accept) oraz „setfib” (ustawienie tabeli routingu).
- Dla niektórych architektur wprowadzono obsługę definiowania rozmiaru bloku (cache line), wykorzystywanego do przesyłania danych między pamięcią podręczną CPU a pamięcią.
- Udoskonalone zarządzanie buforami wykorzystywanymi przy automatycznym określaniu połączeń HTTP/2.
- Zwiększona wydajność uruchamiania konfiguracji z dużą liczbą dyrektyw „location”.
- Usunięto obsługę technologii Server push w HTTP/2.
- Wstrzymano obsługę dyrektywy „ssl”, która wcześniej została oznaczona jako przestarzała.
Stabilna wersja projektu FreeNginx 1.26.0, rozwijającego fork Nginx, została opublikowana dwa tygodnie temu. Rozwój forka prowadzi Maksym Dunin, jeden z kluczowych deweloperów Nginx. FreeNginx jest pozycjonowany jako projekt non-profit, zapewniający rozwój bazy kodu Nginx bez ingerencji korporacyjnej.
Źródło: opennet.ru
