nginx 1.19.7, njs 0.5.1 ๋ฐ NGINX Unit 1.22.0 ์ถœ์‹œ

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

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster