เบเบฒเบ™เบ›เปˆเบญเบ nginx 1.19.7, njs 0.5.1 เปเบฅเบฐ NGINX Unit 1.22.0

เบชเบฒเบ‚เบฒเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡ nginx 1.19.7 เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ, เบžเบฒเบเปƒเบ™เบ—เบตเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฑเบเบชเบฐเบ™เบฐเปƒเบซเบกเปˆเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆ (เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฒเบ‚เบฒเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡ 1.18, เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบฅเบฐเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡).

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเป‰เบ™เบ•เป:

  • ะŸั€ะธ ะธัั‡ะตั€ะฟะฐะฝะธะธ ั€ะฐะฑะพั‡ะธะผ ะฟั€ะพั†ะตััะพะผ ัะฒะพะฑะพะดะฝั‹ั… ัะพะตะดะธะฝะตะฝะธะน, nginx ั‚ะตะฟะตั€ัŒ ะทะฐะบั€ั‹ะฒะฐะตั‚ ะฝะต ั‚ะพะปัŒะบะพ keepalive-ัะพะตะดะธะฝะตะฝะธั, ะฝะพ ะธ ัะพะตะดะธะฝะตะฝะธั ะฒ ัะพัั‚ะพัะฝะธะธ ะพะถะธะดะฐะฝะธั ะทะฐะบั€ั‹ั‚ะธั ัะพะบะตั‚ะฐ (ยซlingering closeยป).
  • ะšะพะด ะพะฑั€ะฐะฑะพั‚ะบะธ ัะพะตะดะธะฝะตะฝะธะน ะฒ 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 ะฟะพ ะพะฑั€ะฐะฑะพั‚ะบะต ะทะฐะฟั€ะพัะพะฒ ั ะฟะพะผะพั‰ัŒัŽ ัะบั€ะธะฟั‚ะพะฒ ะฒ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ. ะกะบั€ะธะฟั‚ั‹ ะผะพะณัƒั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒัั ะฒ ั„ะฐะนะปะต ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ ะดะปั ะพะฟั€ะตะดะตะปะตะฝะธั ั€ะฐััˆะธั€ะตะฝะฝะพะน ะปะพะณะธะบะธ ะพะฑั€ะฐะฑะพั‚ะบะธ ะทะฐะฟั€ะพัะพะฒ, ั„ะพั€ะผะธั€ะพะฒะฐะฝะธั ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ, ะดะธะฝะฐะผะธั‡ะตัะบะพะน ะณะตะฝะตั€ะฐั†ะธะธ ะพั‚ะฒะตั‚ะฐ, ะผะพะดะธั„ะธะบะฐั†ะธะธ ะทะฐะฟั€ะพัะฐ/ะพั‚ะฒะตั‚ะฐ ะธะปะธ ะฑั‹ัั‚ั€ะพะณะพ ัะพะทะดะฐะฝะธั ะทะฐะณะปัƒัˆะตะบ ั ั€ะตัˆะตะฝะธะตะผ ะฟั€ะพะฑะปะตะผ ะฒ web-ะฟั€ะธะปะพะถะตะฝะธัั….

ะ’ ะฝะพะฒะพะน ะฒะตั€ัะธะธ ะดะพะฑะฐะฒะปะตะฝะฐ ะดะธั€ะตะบั‚ะธะฒะฐ ยซjs_header_filterยป, ะฟะพะทะฒะพะปััŽั‰ะฐั ะทะฐะดะฐั‚ัŒ JavaScript-ั„ัƒะฝะบั†ะธัŽ ะดะปั ั„ะธะปัŒั‚ั€ะฐั†ะธะธ ะธ ะธะทะผะตะฝะตะฝะธั ะฟั€ะพะธะทะฒะพะปัŒะฝั‹ั… ะทะฐะณะพะปะพะฒะบะพะฒ ะพั‚ะฒะตั‚ะฐ: 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};

ะขะฐะบะถะต ะดะพะฑะฐะฒะปะตะฝ ะผะตั‚ะพะด ngx.fetch(), ั€ะตะฐะปะธะทัƒัŽั‰ะธะน API Fetch, ะบะพั‚ะพั€ั‹ะน ะฟั€ะตะดะพัั‚ะฐะฒะปัะตั‚ ั„ัƒะฝะบั†ะธะพะฝะฐะปัŒะฝะพัั‚ัŒ HTTP-ะบะปะธะตะฝั‚ะฐ. ะœะตั‚ะพะด ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ ะพะฑั€ะฐะฑะพั‚ะบัƒ ะพะฟั†ะธะน body, headers, 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, ะฟั€ะตะดะปะฐะณะฐัŽั‰ะตะณะพ ั€ะตัˆะตะฝะธะต ะดะปั ะพะฑะตัะฟะตั‡ะตะฝะธั ะทะฐะฟัƒัะบะฐ web-ะฟั€ะธะปะพะถะตะฝะธะน ะฝะฐ ั€ะฐะทะปะธั‡ะฝั‹ั… ัะทั‹ะบะฐั… ะฟั€ะพะณั€ะฐะผะผะธั€ะพะฒะฐะฝะธั (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js ะธ Java). ะŸะพะด ัƒะฟั€ะฐะฒะปะตะฝะธะตะผ NGINX Unit ะผะพะถะตั‚ ะพะดะฝะพะฒั€ะตะผะตะฝะฝะพ ะฒั‹ะฟะพะปะฝัั‚ัŒัั ะฝะตัะบะพะปัŒะบะพ ะฟั€ะธะปะพะถะตะฝะธะน ะฝะฐ ั€ะฐะทะฝั‹ั… ัะทั‹ะบะฐั… ะฟั€ะพะณั€ะฐะผะผะธั€ะพะฒะฐะฝะธั, ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะทะฐะฟัƒัะบะฐ ะบะพั‚ะพั€ั‹ั… ะผะพะถะฝะพ ะธะทะผะตะฝัั‚ัŒ ะดะธะฝะฐะผะธั‡ะตัะบะธ ะฑะตะท ะฝะตะพะฑั…ะพะดะธะผะพัั‚ะธ ะฟั€ะฐะฒะบะธ ั„ะฐะนะปะพะฒ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ ะธ ะฟะตั€ะตะทะฐะฟัƒัะบะฐ. ะšะพะด ะฝะฐะฟะธัะฐะฝ ะฝะฐ ัะทั‹ะบะต ะกะธ ะธ ั€ะฐัะฟั€ะพัั‚ั€ะฐะฝัะตั‚ัั ะฟะพะด ะปะธั†ะตะฝะทะธะตะน Apache 2.0.

ะ’ ะฝะพะฒะพะผ ะฒั‹ะฟัƒัะบะต NGINX Unit ะพัะฝะพะฒะฝะพะต ะฒะฝะธะผะฐะฝะธะต ะฑั‹ะปะพ ัƒะดะตะปะตะฝะพ ะฟะพะฒั‹ัˆะตะฝะธัŽ ัั‚ะฐะฑะธะปัŒะฝะพัั‚ะธ, ั€ะฐััˆะธั€ะตะฝะธัŽ ัั€ะตะดัั‚ะฒ ะดะปั ั‚ะตัั‚ะธั€ะพะฒะฐะฝะธั ะธ ะธัะฟั€ะฐะฒะปะตะฝะธัŽ ะพัˆะธะฑะพะบ. ะ’ ั„ะพั€ะผะธั€ัƒะตะผั‹ั… ะดะปั Linux ะฟะฐะบะตั‚ะฐั… ะธะทะผะตะฝะตะฝั‹ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒ ะธ ะณั€ัƒะฟะฟะฐ, ะฟะพะด ะบะพั‚ะพั€ั‹ะผะธ ะทะฐะฟัƒัะบะฐะตั‚ัั NGINX Unit. ะ’ะผะตัั‚ะพ nobody:nobody ะฟั€ะพั†ะตััั‹ ั‚ะตะฟะตั€ัŒ ะฒั‹ะฟะพะปะฝััŽั‚ัั ะฟะพะด ะพั‚ะดะตะปัŒะฝั‹ะผ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปะตะผ unit ะฒ ะณั€ัƒะฟะฟะต unit. ะžะฑะตัะฟะตั‡ะตะฝะฐ ัะพะฒะผะตัั‚ะธะผะพัั‚ัŒ ั API Stream ะพะฑัŠะตะบั‚ะพะฒ ServerRequest ะธ ServerResponse ะธะท ะผะพะดัƒะปั Node.js. ะ’ ะพะฟั†ะธะธ ยซpathยป ะดะปั Python-ะฟั€ะธะปะพะถะตะฝะธะน ั€ะฐะทั€ะตัˆะตะฝะพ ัƒะบะฐะทะฐะฝะธะต ะฝะตัะบะพะปัŒะบะธั… ะบะฐั‚ะฐะปะพะณะพะฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™