nginx 1.19.7, njs 0.5.1 เจ…เจคเฉ‡ NGINX เจฏเฉ‚เจจเจฟเจŸ 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 เจœเจพเจฐเฉ€ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, nginx เจตเฉˆเฉฑเจฌ เจธเจฐเจตเจฐ เจฒเจˆ เจ‡เฉฑเจ• JavaScript เจฆเฉเจญเจพเจธเจผเฉ€เจเฅค njs เจฆเฉเจญเจพเจธเจผเฉ€เจ ECMAScript เจฎเจฟเจ†เจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ nginx เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚, เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจคเจฟเจ†เจฐ เจ•เจฐเจจ, เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจœเจตเจพเจฌ เจฌเจฃเจพเจ‰เจฃ, เจ‡เฉฑเจ• เจฌเฉ‡เจจเจคเฉ€/เจœเจตเจพเจฌ เจจเฉ‚เฉฐ เจธเฉ‹เจงเจฃ, เจœเจพเจ‚ เจตเฉˆเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจตเจฟเฉฑเจš เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจธเจŸเฉฑเจฌ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‰เฉฑเจจเจค เจคเจฐเจ• เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

ะ’ ะฝะพะฒะพะน ะฒะตั€ัะธะธ ะดะพะฑะฐะฒะปะตะฝะฐ ะดะธั€ะตะบั‚ะธะฒะฐ ยซ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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹