Wydanie nginx 1.19.7, njs 0.5.1 i NGINX Unit 1.22.0

Została wydana główna gałąź nginx 1.19.7, w ramach której kontynuowany jest rozwój nowych funkcjonalności (w równolegle obsługiwanej stabilnej gałęzi 1.18 wprowadzane są jedynie zmiany związane z eliminacją poważnych błędów i podatności).

Główne zmiany:

  • Kiedy procesowi roboczemu skończą się wolne połączenia, nginx zamyka teraz nie tylko połączenia podtrzymujące, ale także połączenia oczekujące na zamknięcie gniazda („trwałe zamknięcie”).
  • Kod przetwarzania połączenia w HTTP/2 jest zbliżony do implementacji HTTP/1.x. Obsługa indywidualnych ustawień „http2_recv_timeout”, „http2_idle_timeout” i „http2_max_requests” została przerwana na rzecz ogólnych dyrektyw „keepalive_timeout” i „keepalive_requests”.
  • Ustawienia „http2_max_field_size” i „http2_max_header_size” zostały usunięte i zamiast nich należy użyć „large_client_header_buffers”.

W tym samym czasie wydano njs 0.5.1, interpreter JavaScript dla serwera WWW Nginx. Interpreter njs implementuje standardy ECMAScript i pozwala rozszerzyć możliwości nginx w zakresie przetwarzania żądań za pomocą skryptów w konfiguracji. Skrypty mogą być użyte w pliku konfiguracyjnym do zdefiniowania zaawansowanej logiki przetwarzania żądań, generowania konfiguracji, dynamicznego generowania odpowiedzi, modyfikowania żądania/odpowiedzi lub szybkiego tworzenia kodów pośredniczących w celu rozwiązywania problemów w aplikacjach internetowych.

Nowa wersja dodaje dyrektywę „js_header_filter”, która pozwala ustawić funkcję JavaScript do filtrowania i zmiany dowolnych nagłówków odpowiedzi: js_import foo.js; lokalizacja / { js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: funkcja filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len? Liczba(r.args.len): 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } eksportuj domyślny {filtr};

Dodana została także metoda ngx.fetch(), która implementuje API Fetch, udostępniające funkcjonalność klienta HTTP. Metoda obsługuje przetwarzanie opcji treści, nagłówków, bufora_rozmiaru i max_response_body_size. Zwrócony obiekt Response obsługuje metody arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type i url, a obiekt Header obsługuje metody get(), getAll() i has() metody. funkcja fetch(r) { ngx.fetch('http://nginx.org/') .then(reply => respond.text()) .then(body => r.return(200, body)) .catch (e => r.return(501, e.wiadomość)); }

Warto także zwrócić uwagę na publikację serwera aplikacji NGINX Unit 1.22, który oferuje rozwiązanie do uruchamiania aplikacji webowych w różnych językach programowania (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js i Java). Jednostka NGINX może jednocześnie uruchamiać wiele aplikacji w różnych językach programowania, których parametry uruchamiania można zmieniać dynamicznie, bez konieczności edycji plików konfiguracyjnych i restartu. Kod napisany jest w języku C i rozpowszechniany na licencji Apache 2.0.

Nowa wersja NGINX Unit skupiała się na poprawie stabilności, rozszerzeniu narzędzi testowych i naprawie błędów. W pakietach generowanych dla Linuksa zmieniono użytkownika i grupę, w ramach której działa NGINX Unit. Zamiast nikt:nikt, procesy są teraz uruchamiane w ramach indywidualnej jednostki użytkownika w grupie jednostek. Zapewniona kompatybilność z Stream API obiektów ServerRequest i ServerResponse z modułu Node.js. Opcja „ścieżka” dla aplikacji Python umożliwia określenie wielu katalogów.

Źródło: opennet.ru

Dodaj komentarz