nginx 1.19.7์ ๋ฉ์ธ ๋ธ๋์น๊ฐ ์ถ์๋์์ผ๋ฉฐ, ๊ทธ ์์์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ด ๊ณ์๋ฉ๋๋ค(๋ณ๋ ฌ ์ง์ ์์ ๋ธ๋์น 1.18์์๋ ์ฌ๊ฐํ ์ค๋ฅ ๋ฐ ์ทจ์ฝ์ ์ ๊ฑฐ์ ๊ด๋ จ๋ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ์ฉ๋จ).
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ :
- ์์ ์ ํ๋ก์ธ์ค์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฐ๊ฒฐ์ด ๋ถ์กฑํด์ง๋ฉด nginx๋ ์ด์ ์ฐ๊ฒฐ ์ ์ง ์ฐ๊ฒฐ๋ฟ๋ง ์๋๋ผ ์์ผ์ด ๋ซํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ฐ๊ฒฐ๋ ๋ซ์ต๋๋ค("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"๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋์์ nginx ์น ์๋ฒ์ฉ JavaScript ์ธํฐํ๋ฆฌํฐ์ธ njs 0.5.1์ด ์ถ์๋์์ต๋๋ค. njs ์ธํฐํ๋ฆฌํฐ๋ ECMAScript ํ์ค์ ๊ตฌํํ๋ฉฐ ๊ตฌ์ฑ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ nginx์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ต๋๋ค. ๊ตฌ์ฑ ํ์ผ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ์ฒ๋ฆฌ, ๊ตฌ์ฑ ์์ฑ, ๋์ ์ผ๋ก ์๋ต ์์ฑ, ์์ฒญ/์๋ต ์์ ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ์คํ ์ ์ ์์ฑ์ ์ํ ๊ณ ๊ธ ๋ ผ๋ฆฌ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
์ ๋ฒ์ ์๋ "js_header_filter" ์ง์๋ฌธ์ด ์ถ๊ฐ๋์ด ์์์ ์๋ต ํค๋๋ฅผ ํํฐ๋งํ๊ณ ๋ณ๊ฒฝํ๊ธฐ ์ํ JavaScript ํจ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. js_import foo.js; ์์น / { js_header_filter foo.filter; ํ๋ก์ํจ์ค http://127.0.0.1:8081/; } foo.js: function filter(r) { var cookie = r.headersOut['Set-Cookie']; var len = r.args.len ? ๋ฒํธ(r.args.len) : 0; r.headersOut['Set-Cookie'] = cookie.filter(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()๋ฅผ ์ง์ํฉ๋๋ค. ๋ฐฉ๋ฒ. 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)); }
๋ํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(Python, PHP, Perl, Ruby, Go, JavaScript/Node.js ๋ฐ Java)๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํ ์๋ฃจ์ ์ ์ ๊ณตํ๋ NGINX Unit 1.22 ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๊ณต๊ฐ์ ์ฃผ๋ชฉํ ์๋ ์์ต๋๋ค. NGINX ์ ๋์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์คํํ ์ ์์ผ๋ฉฐ, ๊ตฌ์ฑ ํ์ผ์ ํธ์งํ๊ณ ๋ค์ ์์ํ ํ์ ์์ด ์คํ ๋งค๊ฐ๋ณ์๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฝ๋๋ C๋ก ์์ฑ๋์์ผ๋ฉฐ Apache 2.0 ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
NGINX Unit์ ์ ๋ฆด๋ฆฌ์ค๋ ์์ ์ฑ ํฅ์, ํ
์คํธ ๋๊ตฌ ํ์ฅ ๋ฐ ๋ฒ๊ทธ ์์ ์ ์ค์ ์ ๋์์ต๋๋ค. Linux์ฉ์ผ๋ก ์์ฑ๋ ํจํค์ง์์ NGINX ์ ๋์ด ์คํ๋๋ ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. none:nobody ๋์ ์ด์ ๊ทธ๋ฃน ๋จ์์ ๊ฐ๋ณ ์ฌ์ฉ์ ๋จ์๋ก ํ๋ก์ธ์ค๊ฐ ์คํ๋ฉ๋๋ค. Node.js ๋ชจ๋์ ServerRequest ๋ฐ ServerResponse ๊ฐ์ฒด์ Stream API์์ ํธํ์ฑ์ด ๋ณด์ฅ๋์์ต๋๋ค. Python ์ ํ๋ฆฌ์ผ์ด์
์ "๊ฒฝ๋ก" ์ต์
์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru