Wydanie nginx 1.30.0 i forka FreeNginx 1.30.0

Po roku rozwoju opublikowano nową stabilną gałąź wysoko wydajnego serwera HTTP oraz wieloprotokołowego serwera proxy nginx 1.30.0, która uwzględnia zmiany z głównej gałęzi 1.29.x. W przyszłości wszystkie zmiany w stabilnej gałęzi 1.30 będą dotyczyć usuwania poważnych błędów i luk bezpieczeństwa. Wkrótce zostanie utworzona główna gałąź nginx 1.31, w której będą kontynuowane prace nad nowymi możliwościami. Dla zwykłych użytkowników, którzy nie muszą zapewniać zgodności z modułami zewnętrznymi, zaleca się korzystanie z głównej gałęzi, na bazie której co trzy miesiące tworzone są wydania komercyjnego produktu Nginx Plus. Kod nginx napisany jest w języku C i jest udostępniany na licencji BSD.

Zgodnie z lutowym raportem firmy Netcraft, pod zarządem nginx działa około 321 mln stron internetowych (rok temu 245 mln, dwa lata temu — 243 mln, trzy lata temu 289 mln). Nginx jest używany na 16,08% wszystkich aktywnych stron (rok temu 17,89%, dwa lata temu 18,15%, trzy lata temu 18,94%), co odpowiada drugiemu miejscu pod względem popularności w tej kategorii (udział Apache wynosi 13,27% (rok temu 16,03%, dwa lata temu 20,09%, trzy lata temu 20,52%), Cloudflare — 20,62% (17,81%, 14,12%, 11,32%), Google — 10,65% (9,89%, 10,41%, 9,89%).

Pod względem wszystkich stron, nginx wciąż utrzymuje pozycję lidera, zajmując 22,65% rynku (rok temu 20,48%, dwa lata temu — 22,31%, trzy lata temu — 25,94%), podczas gdy udział Apache wynosi 12,19% (16,03%, 20,17%, 20,58%), Cloudflare — 15,27% (12,87%, 11,24%, 10,17%), OpenResty (platforma bazująca na nginx i LuaJIT) — 8,01% (9,36%, 7,93%, 7,94%).

Wśród miliona najczęściej odwiedzanych stron na świecie nginx zajmuje drugie miejsce z udziałem 19,85% (rok temu 20,37%, dwa lata temu 20,63%, trzy lata temu 21,37%). Pierwsze miejsce zajmuje Cloudflare — 26,84% (22,32%, 22,59%, 21,62%). Udział Apache httpd wynosi 15,84% (17,95%, 20,09%, 21,18%). Wydanie nginx 1.30.0 i forka FreeNginx 1.30.0

Z danych W3Techs wynika, że nginx jest używany na 32,8% stron z miliona najczęściej odwiedzanych (w kwietniu ubiegłego roku wskaźnik ten wynosił 33,8%, przed rokiem — 34,3%). Udział Apache spadł w ciągu roku z 26,3% do 23,9%, udział Microsoft IIS spadł z 4% do 3,4%, a udział Caddy z 0,3% do 0,2%. Udział Node.js wzrósł z 4,4% do 6,0%, a udział LiteSpeed z 14,6% do 15,2%.

Najbardziej zauważalne ulepszenia dodane w procesie formowania głównej gałęzi 1.29.x:

  • Dodano wsparcie dla rozszerzenia TLS ECH (Encrypted ClientHello), które kontynuuje rozwój rozszerzenia ESNI (Encrypted Server Name Indication) i służy do szyfrowania informacji o parametrach sesji TLS, takich jak żądana nazwa domeny. Kluczową różnicą między ECH a ESNI jest to, że w ECH szyfrowane jest całe wiadomości TLS ClientHello, co pozwala zablokować wycieki przez pola, które nie są objęte ESNI, na przykład pole PSK (Pre-Shared Key). Użycie ECH jest włączane przez wskazanie w dyrektywie "ssl_ech_file" pliku konfiguracyjnego ECHConfig w formacie PEM. Wsparcie jest dostępne przy użyciu kompilacji OpenSSL z ECH.
  • Dodano wsparcie dla protokołu Multipath TCP (MPTCP), który umożliwia dostarczanie pakietów jednocześnie przez różne trasy za pomocą różnych interfejsów sieciowych. Aby włączyć, dodano parametr "multipath" do dyrektywy "listen".
  • Dodano możliwość przypisania sesji klientów do tych samych serwerów w grupie. Dostępne są trzy metody: "cookie" — przekazywanie danych o wybranym kliencie przez określone Cookie; "route" — serwer proxy przydziela klientowi trasę po otrzymaniu pierwszego żądania; "learn" — nginx analizuje odpowiedzi od serwera upstream i zapamiętuje sesje rozpoczęte przez serwer. Aby skonfigurować przypisanie, dodano dyrektywę "sticky" do bloku "upstream" modułu "http", a parametry "route" i "drain" dodano do dyrektywy "server". serwerze Dodano dyrektywę "early_hints" oraz zaimplementowano wsparcie dla kodu HTTP 103 w odpowiedziach z backendu proxy i gRPC. Kod 103 pozwala informować klienta o treści niektórych nagłówków HTTP zaraz po wysłaniu żądania, bez czekania na zakończenie wszystkich operacji związanego z żądaniem i rozpoczęcie dostarczania treści przez serwer. W ten sposób można przekazywać wskazówki na temat elementów związanych z dostarczaną stroną, które mogą być wstępnie załadowane (na przykład można podać linki do używanych na stronie plików CSS i JavaScript). Otrzymując informacje o takich zasobach, przeglądarka zacznie ich ładowanie bez czekania na zakończenie dostarczania głównej strony, co pozwala skrócić całkowity czas przetwarzania żądania.
  • Dodano dyrektywę "early_hints" i zaimplementowano wsparcie dla kodu HTTP 103 w odpowiedziach od backendów proxy i gRPC. Kod 103 pozwala informować klienta o zawartości niektórych nagłówków HTTP od razu po wysłaniu żądania, nie czekając na zakończenie wszystkich operacji związanych z żądaniem i rozpoczęcie wysyłania treści przez serwer. Można także przekazywać wskazówki dotyczące elementów związanych z udostępnianą stroną, które mogą być wstępnie załadowane (na przykład można podać linki do plików CSS i JavaScript używanych na stronie). Gdy przeglądarka otrzyma informacje o takich zasobach, rozpocznie ich ładowanie, nie czekając na zakończenie dostarczania głównej strony, co pozwala skrócić całkowity czas przetwarzania żądania.
  • Dodano dyrektywy add_header_inherit i add_trailer_inherit, umożliwiające zmianę zasad dziedziczenia wartości wskazanych w dyrektywach add_header i add_trailer. Parametr „off” anuluje dziedziczenie wartości, a parametr „merge” włącza dodawanie wartości z poprzedniego poziomu do wartości na bieżącym poziomie.
  • Dodano dyrektywę „ssl_certificate_compression” do zarządzania kompresją. certyfikatów TLS.
  • Dodano dyrektywę max_headers, ograniczającą maksymalną liczbę nagłówków HTTP w żądaniu. Przy przekroczeniu limitu zwracany jest błąd 400 (Bad Request). Funkcja została przeniesiona z FreeNginx.
  • Dodano zmienne $request_port i $is_request_port. Pierwsza zmienna zawiera numer portu z komponentu URI lub z nagłówka „Host”, a druga zawiera „:”, jeśli zmienna $request_port nie jest pusta.
  • Dodano zmienne $ssl_sigalg i $ssl_client_sigalg, zawierające nazwę algorytmu tworzenia podpisu cyfrowego dla połączenia TLS.
  • Do dyrektywy „geo” dodano parametr „volatile”, wyłączający cache'owanie zmiennej. Dozwolone jest stosowanie masek w dyrektywie „include”, wskazanej wewnątrz bloku „geo”.
  • W bloku „upstream” domyślnie aktywowano dyrektywę „keepalive”. Do dyrektywy „keepalive” używanej w bloku „upstream” dodano parametr „local”. Po wskazaniu tego parametru, zamiast współdzielić jedno połączenie do wspólnego serwera upstream wspomnianego w różnych blokach location i server, dla każdego bloku utrzymywane jest osobne połączenie do upstream.
  • Podczas użycia w trybie proxy domyślnie ustawiona wersja protokołu HTTP/1.1 z włączonym trybem keep-alive (w module ngx_http_proxy_module domyślnie włączona jest obsługa keep-alive, a wartość „1.1” ustawiona jest w dyrektywie „proxy_http_version” oraz zakończono domyślne wysyłanie nagłówka „Connection”).
  • W module ngx_http_proxy dodano obsługę protokołu HTTP/2, co pozwala na korzystanie z HTTP/2 podczas komunikacji z backendami.
  • Udostępniono możliwość ładowania kluczy kryptograficznych z tokenów sprzętowych, wykorzystując bibliotekę OpenSSL jako dostawcę.
  • W implementacji protokołu QUIC dodano obsługę trybu 0-RTT, dostępnego na systemach z OpenSSL 3.5.1 i nowszymi wersjami.
  • Dodano możliwość budowy z biblioteką kryptograficzną AWS-LC, rozwijaną przez firmę Amazon.
  • Domyślnie wyłączone jest kompresowanie certyfikatów TLSv1.3.
  • Zapewniona jest zgodność z biblioteką OpenSSL 4.0.

Dodatkowo można wspomnieć o publikacji wydania projektu FreeNginx 1.30.0, rozwijającego forka Nginx. Rozwój forka prowadzi Maksim Dunin, jeden z kluczowych programistów Nginx. FreeNginx jest pozycjonowany jako projekt non-profit, zapewniający rozwój bazy kodowej Nginx bez korporacyjnego wpływu. Kod FreeNginx nadal jest dostarczany na licencji BSD. Wśród zmian w gałęzi FreeNginx 1.30: dodano wsparcie dla rozszerzenia TLS ECH (Encrypted Client Hello); poprawiono przetwarzanie dyrektywy limit_rate; dodano dyrektywy send_min_rate i client_body_min_rate; zrealizowano możliwość ograniczenia liczby połączeń i intensywności zapytań w serwerze pocztowym; dodano wsparcie dla bazy danych GeoIP2 w module GeoIP; wzmocniono ochronę modułu XSLT.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster