ืืขื ืฃ ืืจืืฉื ืฉื nginx 1.19.7 ืฉืืืจืจ, ืฉืืชืืื ื ืืฉื ืืคืืชืื ืฉื ืชืืื ืืช ืืืฉืืช (ืืกื ืืฃ ืืืฆืื ืื ืชืื ืืืงืืื 1.18, ืืชืืฆืขืื ืจืง ืฉืื ืืืื ืืงืฉืืจืื ืืืืืื ืฉืืืืืช ืืคืืืขืืืืช ืืืืจืืช).
ืฉืื ืืืื ืขืืงืจืืื:
- ืืืฉืจ ืชืืืื ืขืืื ืืืื ืืืืืืืจืื ืืคื ืืืื, nginx ืกืืืจ ืืขืช ืื ืจืง ืืืืืจื Keepalive, ืืื ืื ืืืืืจืื ืฉืืืชืื ืื ืืกืืืจืช ืืฉืงืข ("ืกืืืจื ืืชืืฉืืช").
- ืงืื ืขืืืื ืืืืืืจ ื-HTTP/2 ืงืจืื ืืืืืืฉ HTTP/1.x. ืืชืืืื ืืืืืจืืช ืืืืฉืืืช "http2_recv_timeout", "http2_idle_timeout" ื-"http2_max_requests" ืืืคืกืงื ืืืืืช ืืื ืืืืช ืืืืืืืช "keepalive_timeout" ื-"keepalive_requests".
- ืืืืืจืืช "http2_max_field_size" ื-"http2_max_header_size" ืืืกืจื ืืืืงืื ืืืช ืืฉ ืืืฉืชืืฉ ื-"large_client_header_buffers".
ืืืงืืื, ืฉืืืจืจ njs 0.5.1, ืืชืืจืืื JavaScript ืขืืืจ ืฉืจืช ืืืื ืืจื ื nginx. ืืชืืจืืื njs ืืืืฉื ืชืงื ื ECMAScript ืืืืคืฉืจ ืื ืืืจืืื ืืช ืืืืืืช ืฉื nginx ืืขืื ืืงืฉืืช ืืืืฆืขืืช ืกืงืจืืคืืื ืืชืฆืืจื. ื ืืชื ืืืฉืชืืฉ ืืกืงืจืืคืืื ืืงืืืฅ ืชืฆืืจื ืืื ืืืืืืจ ืืืืืงื ืืชืงืืืช ืืขืืืื ืืงืฉืืช, ืืฆืืจืช ืชืฆืืจื, ืืฆืืจื ืืื ืืืช ืฉื ืชืืืื, ืฉืื ืื ืืงืฉื/ืชืืืื, ืื ืืฆืืจื ืืืืจื ืฉื ืงืืขืื ืืคืชืจืื ืืขืืืช ืืืืฉืืื ืืื ืืจื ื.
ืืืจืกื ืืืืฉื ืืืกืืคื ืืช ืืื ืืื "js_header_filter", ืืืืคืฉืจืช ืื ืืืืืืจ ืคืื ืงืฆืืืช JavaScript ืืกืื ืื ืืฉืื ืื ืืืชืจืืช ืชืืืืืช ืฉืจืืจืืชืืืช: js_import foo.js; ืืืงืื / { 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); } ืืืฆืื ืืจืืจืช ืืืื {ืืกื ื};
ื ืืกืคื ืื ืฉืืืช ngx.fetch(), ืืืืืฉืืช ืืช ื-Fetch API, ืืืกืคืง ืคืื ืงืฆืืื ืืืืช ืฉื ืืงืื HTTP. ืืฉืืื ืชืืืืช ืืขืืืื ืฉื ืืคืฉืจืืืืช ืืืฃ, ืืืชืจืืช, buffer_size ื-max_response_body_size. ืืืืืืงื ื-Response ืืืืืืจ ืชืืื ื-arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type ื-url, ืืืืืืืงื Header ืชืืื ื-get(), getAll() ื- 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)); }
ืืื ืื, ื ืืชื ืืฆืืื ืืช ืคืจืกืื ืฉืจืช ืืืืฉืืืื NGINX Unit 1.22, ืืืฆืืข ืคืชืจืื ืืืคืขืืช ืืคืืืงืฆืืืช ืืื ืืจื ื ืืฉืคืืช ืชืื ืืช ืฉืื ืืช (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js ื-Java). NGINX Unit ืืืืื ืืืจืืฅ ืื ืืื ืืช ืืกืคืจ ืืืฉืืืื ืืฉืคืืช ืชืื ืืช ืฉืื ืืช, ืฉืืช ืคืจืืืจื ืืืฉืงื ืฉืืื ื ืืชื ืืฉื ืืช ืืืืคื ืืื ืื ืืื ืฆืืจื ืืขืจืื ืงืืฆื ืชืฆืืจื ืืืืคืขืื ืืืืฉ. ืืงืื ืืชืื ื-C ืืืืคืฅ ืชืืช ืจืืฉืืื Apache 2.0.
ืืืืืืจื ืืืืฉื ืฉื NGINX Unit ืืชืืงืื ืืฉืืคืืจ ืืืฆืืืืช, ืืจืืืช ืืื ืืืืืงื ืืชืืงืื ืืืืื. ืืืืืืืช ืฉื ืืฆืจื ืขืืืจ ืืื ืืงืก, ืืฉืชื ื ืืืฉืชืืฉ ืืืงืืืฆื ืฉืชืืชืืื ืคืืขืืช NGINX Unit. ืืืงืื nobody:nobody, ืชืืืืืื ืคืืขืืื ืืขืช ืชืืช ืืืืืช ืืืฉืชืืฉ ืืืืืืช ืืงืืืฆืช ืืืืืืืช. ืืืืืืช ืชืืืืืช ื- Stream API ืฉื ืืืืืืืงืืื ServerRequest ื- ServerResponse ืืืืืืื Node.js. ืืคืฉืจืืช ื"ื ืชืื" ืขืืืจ ืืืฉืืื Python ืืืคืฉืจืช ืืฆืืื ืืกืคืจ ืกืคืจืืืช.
ืืงืืจ: OpenNet.ru