Byla vydána hlavní verze nginx 1.19.7, v jejímž rámci pokračuje vývoj nových funkcí (v paralelně podporované stabilní větvi 1.18 jsou prováděny pouze úpravy související s opravou závažných chyb a zranitelností).
Hlavní změny:
- Když dojde k vyčerpání volných připojení pracovním procesem, nginx nyní uzavírá nejen keepalive připojení, ale také připojení ve stavu čekání na uzavření socketu („lingering close“).
- Kód zpracování připojení v HTTP/2 byl přiblížen implementaci HTTP/1.x. Podpora jednotlivých nastavení „http2_recv_timeout“, „http2_idle_timeout“ a „http2_max_requests“ byla zrušena ve prospěch obecných direktiv „keepalive_timeout“ a „keepalive_requests“.
- Byly odstraněny nastavení „http2_max_field_size“ a „http2_max_header_size“, místo kterých by se mělo používat „large_client_header_buffers“.
Současně byla vydána njs 0.5.1, interpretátor jazyka JavaScript pro webového serveru nginx. Interpretr njs implementuje standardy ECMAScript a umožňuje rozšiřovat možnosti nginx při zpracování požadavků pomocí skriptů v konfiguraci. Skripty mohou být použity v konfiguračním souboru k určení rozšířené logiky zpracování požadavků, formování konfigurace, dynamické generaci odpovědi, úpravě požadavků/odpovědí nebo rychlému vytváření zástupných řešení problémů ve webových aplikacích.
V nové verzi byla přidána direktiva „js_header_filter“, která umožňuje definovat JavaScriptovou funkci pro filtrování a úpravu jakýchkoli odpovědních hlaviček: js_import foo.js; location / { 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 ? Number(r.args.len) : 0; r.headersOut[‘Set-Cookie’] = cookies.filter(v=>v.length > len); } export default {filter};
Dále byla přidána metoda ngx.fetch(), která implementuje API Fetch, jež poskytuje funkčnost HTTP klienta. Metoda podporuje zpracování voleb body, headers, buffer_size a max_response_body_size. Ve vráceném objektu Response jsou podporovány metody arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type a url, a v objektu Header metody get(), getAll() a has(). 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)); }
Také lze zmínit publikaci serveru aplikací NGINX Unit 1.22, která nabízí řešení pro spouštění webových aplikací v různých programovacích jazycích (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js a Java). Pod řízením NGINX Unit může být souběžně spuštěno více aplikací v různých programovacích jazycích, jejichž spouštěcí parametry lze dynamicky měnit bez potřeby úpravy konfiguračních souborů a restartu. Kód je napsán v jazyce C a šíří se pod licencí Apache 2.0.
V novém vydání NGINX Unit byla kladena hlavní pozornost na zlepšení stability, rozšíření prostředků pro testování a opravu chyb. V balících pro Linux byla změněna uživatelská a skupinová nastavení, pod kterými NGINX Unit běží. Místo nobody:nobody nyní procesy běží pod samostatným uživatelským jménem unit ve skupině unit. Byla zajištěna kompatibilita s API Stream objektů ServerRequest a ServerResponse z modulu Node.js. V možnosti „path“ pro aplikace Python bylo povoleno uvádění několika adresářů.
Zdroj: opennet.ru
