nginx 1.19.7, njs 0.5.1 un NGINX vienības 1.22.0 izlaišana

Ir izlaista nginx 1.19.7 galvenā filiāle, kuras ietvaros turpinās jaunu līdzekļu izstrāde (paralēli atbalstītajā stabilajā zarā 1.18 tiek veiktas tikai izmaiņas, kas saistītas ar nopietnu kļūdu un ievainojamību novēršanu).

Galvenās izmaiņas:

  • Kad darbinieka procesam beidzas brīvie savienojumi, nginx tagad aizver ne tikai saglabātos savienojumus, bet arī savienojumus, kas gaida ligzdas aizvēršanu (“lingering close”).
  • Savienojuma apstrādes kods HTTP/2 ir tuvu HTTP/1.x ieviešanai. Atbalsts atsevišķiem iestatījumiem "http2_recv_timeout", "http2_idle_timeout" un "http2_max_requests" ir pārtraukts par labu vispārīgajām direktīvām "keepalive_timeout" un "keepalive_requests".
  • Iestatījumi “http2_max_field_size” un “http2_max_header_size” ir noņemti, un tā vietā ir jāizmanto “large_client_header_buffers”.

Tajā pašā laikā tika izlaists njs 0.5.1 — JavaScript tulks nginx tīmekļa serverim. Njs tulks ievieš ECMAScript standartus un ļauj paplašināt nginx spēju apstrādāt pieprasījumus, izmantojot konfigurācijas skriptus. Skriptus var izmantot konfigurācijas failā, lai definētu papildu loģiku pieprasījumu apstrādei, konfigurācijas ģenerēšanai, dinamiskai atbildes ģenerēšanai, pieprasījuma/atbildes modificēšanai vai ātrai stubu izveidei, lai atrisinātu problēmas tīmekļa lietojumprogrammās.

Jaunajā versijā ir pievienota direktīva “js_header_filter”, kas ļauj iestatīt JavaScript funkciju patvaļīgu atbilžu galvenes filtrēšanai un mainīšanai: js_import foo.js; atrašanās vieta / { js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: function filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len ? Skaitlis(r.args.len): 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } eksportēt noklusējuma {filtrs};

Pievienota arī metode ngx.fetch(), kas ievieš Fetch API, kas nodrošina HTTP klienta funkcionalitāti. Metode atbalsta pamatteksta, galvenes, buffer_size un max_response_body_size opciju apstrādi. Atgrieztais atbildes objekts atbalsta arrayBuffer(), bodyUsed, json(), galvenes, ok, redirect, status, statusText, text(), tipa un url metodes, un Header objekts atbalsta get(), getAll() un has() metodes. function fetch(r) { ngx.fetch('http://nginx.org/') .then(reply => reply.text()) .then(body => r.return(200, body)) .catch (e => r.return(501, e.message)); }

Varat arī atzīmēt NGINX Unit 1.22 lietojumprogrammu servera publikāciju, kas piedāvā risinājumu tīmekļa lietojumprogrammu palaišanai dažādās programmēšanas valodās (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js un Java). NGINX Unit var vienlaicīgi darbināt vairākas lietojumprogrammas dažādās programmēšanas valodās, kuru palaišanas parametrus var dinamiski mainīt bez nepieciešamības rediģēt konfigurācijas failus un restartēt. Kods ir rakstīts C valodā un tiek izplatīts saskaņā ar Apache 2.0 licenci.

Jaunajā NGINX vienības laidienā galvenā uzmanība tika pievērsta stabilitātes uzlabošanai, testēšanas rīku paplašināšanai un kļūdu labošanai. Linux ģenerētajās pakotnēs ir mainīts lietotājs un grupa, kurā darbojas NGINX vienība. Neviens:neviens vietā procesi tagad darbojas atsevišķā lietotāja vienībā vienību grupā. Nodrošināta saderība ar ServerRequest un ServerResponse objektu Stream API no moduļa Node.js. Opcija "Ceļš" Python lietojumprogrammām ļauj norādīt vairākus direktorijus.

Avots: opennet.ru

Pievieno komentāru