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๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธํฐํ๋ฆฌํฐ์ ๋๋ค. ์น ์๋ฒ Nginx๋ ECMAScript ํ์ค์ ๊ตฌํํ๋ njs ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ตฌ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด Nginx์ ์์ฒญ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ๊ตฌ์ฑ ํ์ผ์์ ๊ณ ๊ธ ์์ฒญ ์ฒ๋ฆฌ ๋ก์ง์ ์ ์ํ๊ฑฐ๋, ๊ตฌ์ฑ์ ์์ฑํ๊ฑฐ๋, ์๋ต์ ๋์ ์ผ๋ก ์์ฑํ๊ฑฐ๋, ์์ฒญ/์๋ต์ ์์ ํ๊ฑฐ๋, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์คํ ์ ์ ์ํ๊ฒ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ก์ด ๋ฒ์ ์์๋ "js_header_filter" ์ง์์ด๊ฐ ์ถ๊ฐ๋์ด, ์์์ ์๋ต ํค๋๋ฅผ ํํฐ๋งํ๊ณ ๋ณ๊ฒฝํ๊ธฐ ์ํ JavaScript ํจ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค: js_import foo.js; ์์น / { js_header_filter foo.filter; ํ๋ก์_ํจ์ค http://127.0.0.1:8081/; } foo.js: ํํฐ ํจ์(r) { var ์ฟ ํค = r.headersOut['Set-Cookie']; var len = r.args.len ? ์ซ์(r.args.len) : 0; r.headersOut['Set-Cookie'] = ์ฟ ํค.ํํฐ(v=>v.length > len); } ๊ธฐ๋ณธ {ํํฐ}๋ฅผ ๋ด๋ณด๋ ๋๋ค.
๋ํ HTTP ํด๋ผ์ด์ธํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Fetch API๋ฅผ ๊ตฌํํ๋ ngx.fetch() ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ณธ๋ฌธ, ํค๋, buffer_size ๋ฐ max_response_body_size ์ต์ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ๋ฐํ๋ Response ๊ฐ์ฒด๋ arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type ๋ฐ url ๋ฉ์๋๋ฅผ ์ง์ํ๊ณ , Header ๊ฐ์ฒด๋ get(), getAll() ๋ฐ has() ๋ฉ์๋๋ฅผ ์ง์ํฉ๋๋ค. ํจ์ 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 ะพัะฝะพะฒะฝะพะต ะฒะฝะธะผะฐะฝะธะต ะฑัะปะพ ัะดะตะปะตะฝะพ ะฟะพะฒััะตะฝะธั ััะฐะฑะธะปัะฝะพััะธ, ัะฐััะธัะตะฝะธั ััะตะดััะฒ ะดะปั ัะตััะธัะพะฒะฐะฝะธั ะธ ะธัะฟัะฐะฒะปะตะฝะธั ะพัะธะฑะพะบ. ะ ัะพัะผะธััะตะผัั
ะดะปั Linux ะฟะฐะบะตัะฐั
ะธะทะผะตะฝะตะฝั ะฟะพะปัะทะพะฒะฐัะตะปั ะธ ะณััะฟะฟะฐ, ะฟะพะด ะบะพัะพััะผะธ ะทะฐะฟััะบะฐะตััั NGINX Unit. ะะผะตััะพ nobody:nobody ะฟัะพัะตััั ัะตะฟะตัั ะฒัะฟะพะปะฝััััั ะฟะพะด ะพัะดะตะปัะฝัะผ ะฟะพะปัะทะพะฒะฐัะตะปะตะผ unit ะฒ ะณััะฟะฟะต unit. ะะฑะตัะฟะตัะตะฝะฐ ัะพะฒะผะตััะธะผะพััั ั API Stream ะพะฑัะตะบัะพะฒ ServerRequest ะธ ServerResponse ะธะท ะผะพะดัะปั Node.js. ะ ะพะฟัะธะธ ยซpathยป ะดะปั Python-ะฟัะธะปะพะถะตะฝะธะน ัะฐะทัะตัะตะฝะพ ัะบะฐะทะฐะฝะธะต ะฝะตัะบะพะปัะบะธั
ะบะฐัะฐะปะพะณะพะฒ.
์ถ์ฒ : opennet.ru
