nginx 1.25.3, njs 0.8.2 ๋ฐ NGINX Unit 1.31.1 ์ถœ์‹œ

nginx 1.25.3์˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ์•ˆ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ๊ณ„์†๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ๋กœ ์œ ์ง€๋˜๋Š” ์•ˆ์ • ๋ธŒ๋žœ์น˜ 1.24.x์—๋Š” ์‹ฌ๊ฐํ•œ ๋ฒ„๊ทธ ๋ฐ ์ทจ์•ฝ์  ์ œ๊ฑฐ์™€ ๊ด€๋ จ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„์—๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ 1.25.x๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ˆ์ •์ ์ธ ๋ธŒ๋žœ์น˜ 1.26์ด ํ˜•์„ฑ๋  ์˜ˆ์ •์ด๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • HTTP/2 ํด๋ผ์ด์–ธํŠธ์˜ ๋น„์ •์ƒ์ ์ธ ํ™œ๋™์— ๋Œ€ํ•œ ๋ณดํ˜ธ๊ฐ€ ๊ฐ•ํ™”๋˜์—ˆ์œผ๋ฉฐ, ํŠนํžˆ ๋‹จ์ผ HTTP/2 ์—ฐ๊ฒฐ ๋‚ด์—์„œ ๋‹ค์ˆ˜์˜ ์ฆ‰์‹œ ์žฌ์„ค์ • ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” "Rapid Reset" ํด๋ž˜์Šค์˜ DoS ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๊ฐ€ ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—์„œ ์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์€ ์—ฐ๊ฒฐ๋‹น ์š”์ฒญ ์ˆ˜ ์ œํ•œ "keepalive_requests"(1000๊ฐœ ์š”์ฒญ๋งˆ๋‹ค ์—ฐ๊ฒฐ์ด ์žฌ์„ค์ •๋จ)์™€ "limit_req" ์ œํ•œ์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•œ ์š”์ฒญ ํญ์ฃผ์— ์กฐ๊ธฐ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ฃผ๊ธฐ๋‹น 256๊ฐœ(2 * max_concurrent_streams) ์ด์ƒ์˜ ์ƒˆ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ถ”๊ฐ€ ์ œํ•œ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ œํ•œ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋™์‹œ ์Šค๋ ˆ๋“œ ์ˆ˜์˜ ์ „์ฒด ์ œํ•œ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์—(์˜ˆ: ์Šค๋ ˆ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ฑฐ๋‚˜ ํ”Œ๋Ÿฌ์‹œ๋˜๋Š” ๊ฒฝ์šฐ) ์š”์ฒญ ์ฐจ๋‹จ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ฃผ์ผ ์ „์— ๋ฐœํ‘œ๋œ angie 1.3.1(nginx ํฌํฌ) ๋ฆด๋ฆฌ์Šค์—๋„ ๋น„์Šทํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • HTTP/2 ์—ฐ๊ฒฐ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฒ„ํผ ๊ด€๋ฆฌ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์ˆ˜์˜ "์œ„์น˜" ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์„ ์‹œ์ž‘ํ•˜๋Š” ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • HTTP/2๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ž ํ”„๋กœ์„ธ์Šค ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. SSL.
  • ๋นˆ ์„ค๋ช… ํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ˜ํ™˜๋œ "์ƒํƒœ" ํ—ค๋”์˜ ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • PCRE2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋นŒ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์žฌ๊ตฌ์„ฑ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • HTTP/3 ํ”„๋กœํ† ์ฝœ ์ง€์›๊ณผ ๊ด€๋ จ๋œ ๋งŽ์€ ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์—, njs 0.8.2๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ž…๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„ nginx. njs ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ECMAScript ํ‘œ์ค€์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ nginx์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๊ณ ๊ธ‰ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์‘๋‹ต์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์š”์ฒญ/์‘๋‹ต์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ…์„ ์‹ ์†ํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—๋Š” error(), info(), log(), time(), timeEnd(), warn() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” console ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ fs ๋ชจ๋“ˆ์— fs.existsSync() ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(Python, PHP, Perl, Ruby, Go, JavaScript/Node.js ๋ฐ Java)๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” NGINX Unit 1.31.1 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๊ณต๊ฐœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NGINX ์œ ๋‹›์€ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•  ํ•„์š” ์—†์ด ์‹คํ–‰ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ์ˆ˜์ • ์™ธ์—๋„ Wasm ๋ชจ๋“ˆ์˜ ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” 4GB๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‘๋‹ต ์‹œ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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