[nginx] nginx๋ž€?

ggydo59ยท2023๋…„ 3์›” 28์ผ
0

๐Ÿ’ก ์›น์„œ๋ฒ„๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Nginx์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
์šฐ์•„ํ•œํ…Œํฌ์˜ 10๋ถ„ ํ…Œ์ฝ”ํ†ก ํ”ผ์ผ€์ด๋‹˜์˜ ์˜์ƒ์„ ๋ณด๊ณ  ์š”์•ฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์˜์ƒ์„ ๋ณด๊ณ ์˜ค์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋…๊ณผ ๋“ฑ์žฅ๋ฐฐ๊ฒฝ

๊ฐœ๋…

๊ฐ€๋ฒผ์šฐ๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋ชฉํ‘œ๋กœ ๊ฐœ๋ฐœ๋˜์–ด ๋ฏธ๊ตญ์—์„œ ์šด์˜์ค‘์ธ ์˜คํ”ˆ ์†Œ์Šค ์›น์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์ด๋ฉฐ HTTP ์›น์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„(Reverse Proxy Server) ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์š”์ฒญ์—๋„ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(Load balancer)์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

  • ์›น ์„œ๋ฒ„์˜ ์—ญ์‚ฌ ์•„ํŒŒ์น˜ ์„œ๋ฒ„๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ด์ „ NCSA HTTPd๊ฐ€ ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์–ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•ฉ์‹ฌํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ์•„ํŒŒ์น˜ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
  • ์•„ํŒŒ์น˜ ์„œ๋ฒ„์˜ ๊ตฌ์กฐ์™€ ์š”์ฒญ์ฒ˜๋ฆฌ ํ๋ฆ„
    • ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปค๋„ฅ์…˜์„ ํ• ๋‹น
    • ๊ทธ๋Ÿฌ๋‚˜, ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘๋Š” PREFORK๋ผ๋Š” ๋ฐฉ์‹์„ ํ™œ์šฉ โ†’ ์ƒ์„ฑํ•œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ํ• ๋‹น์ด ๋๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค ์ถ”๊ฐ€ ์ƒ์„ฑ
    • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์˜ ์žฅ์ ์€ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„์— ๋น ๋ฅด๊ฒŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Œ.
  • ์•„ํŒŒ์น˜ ์„œ๋ฒ„์˜ ๋ฌธ์ œ์ 
    • 1999๋…„ ๊ฐœ์ธ ์ปดํ“จํ„ฐ์˜ ๋ณด๊ธ‰์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์ง์— ๋”ฐ๋ผ ์„œ๋ฒ„์—์„œ ๋™์‹œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜์ด ์ œํ•œ๋˜๊ธฐ ์‹œ์ž‘ํ•จ. โ†’ C10K(Connection 10000 problem)
    • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ(๋งค ์—ฐ๊ฒฐ์‹œ ํ”„๋กœ์„ธ์Šค ํ• ๋‹น ๋ฐ ์ƒ์„ฑ), ๋งŽ์€ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•œ ๋ฌด๊ฑฐ์šด ํ”„๋กœ๊ทธ๋žจ, Context Switching์œผ๋กœ ์ธํ•œ CPU๋ถ€ํ•˜์˜ ์ฆ๊ฐ€.

2004๋…„ ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๊ณต๊ฐœ๋˜์—ˆ์œผ๋‚˜, ์‚ฌ์‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์€ ๋งŽ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•ต์‹ฌ์ ์ธ ์š”์ธ์€ ์• ํ”Œ์—์„œ ์Šค๋งˆํŠธํฐ์„ ๊ณต๊ฐœํ•˜๋ฉด์„œ๋ถ€ํ„ฐ ์ธํ„ฐ๋„ท์˜ ์ ‘๊ทผ์„ฑ์ด ์ข‹์•„์ ธ ๋™์‹œ์ ‘์†์ž๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜๊ธฐ์‹œ์ž‘ํ•œ 2008๋…„๋ถ€ํ„ฐ ๋งŽ์ด ๋„์ž…๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

Nginx์˜ ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ

  • ์ตœ์ดˆ์˜ nginx ์ตœ์ดˆ์˜ nginx๋Š” ์ž์ฒด ์›น์„œ๋ฒ„์ด์ง€๋งŒ ์•„ํŒŒ์น˜ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์•„ํŒŒ์น˜ ์„œ๋ฒ„์˜ ์•ž๋‹จ์— ์œ„์น˜ํ•˜์—ฌ์„œ ๋งŽ์€ connection๊ณผ ์ •์  ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ์€ nginx๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋™์  ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋งŒ apache server๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์•„ํŒŒ์น˜ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • nginx๋Š” ์–ด๋–ป๊ฒŒ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ• ๊นŒ?
    • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์‹œ Keep-Alive ๋™์•ˆ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ด๋Ÿฌํ•œ ์ปค๋„ฅ์…˜์˜ ์ƒ์„ฑ, ์ œ๊ฑฐ ๋“ฑ๋“ฑ์˜ ํ™œ๋™์„ ์ด๋ฒคํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    • CPU๊ฐœ์ˆ˜ ๋งŒํผ์˜ worker process(์Šค๋ ˆ๋“œ๋‹จ์œ„)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  master process์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.
    • Context switching์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.
    • ์š”์ฒญ์—์„œ ๋ฐœ์ƒ๋œ ์ด๋ฒคํŠธ๋ฅผ Queueํ˜•์‹์œผ๋กœ worker process์— ๋„ฃ์–ด๋‘๊ณ  ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.
    • ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์ฑ„์šฉํ•˜๋ฉด ์•„ํŒŒ์น˜ ์„œ๋ฒ„์˜ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‰ฌ์ง€ ์•Š๊ณ  ์ผ์„ ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ, Event๊ฐ€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ Thred Pool์—๊ฒŒ ์œ„์ž„ํ•˜๊ณ  ๋‹ค์Œ Event๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • nginx์˜ ์žฅ๋‹จ์ 
    • ์žฅ์ 
      • ๋™์‹œ ์ปค๋„ฅ์…˜ ์–‘ ์ตœ์†Œ 10๋ฐฐ ์ฆ๊ฐ€(์ผ๋ฐ˜์ ์œผ๋กœ๋Š” 100~1000๋ฐฐ ์ฆ๊ฐ€)
      • ๋™์ผ ์ปค๋„ฅ์…˜ ์ˆ˜ ์†๋„ 2๋ฐฐ ํ–ฅ์ƒ
      • ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์šด์˜์ค‘์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ. (๋™์  ์„ค์ •)
        • ์„ค์ •์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•œ ์›Œ์ปค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์šฉํ•˜๊ณ , ๊ธฐ์กด์˜ ์›Œ์ปคํ”„๋กœ์„ธ์Šค๋Š” ํ• ๋‹น๋œ ์ด๋ฒคํŠธ๋“ค์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ›„ ์ข…๋ฃŒ๋œ๋‹ค.
    • ๋‹จ์ 
      • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค. โ†’ ์ด ๋ถ€๋ถ„์€ ํ˜„ ์ง€์‹์œผ๋กœ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋„ค์š”โ€ฆ

Nginx์˜ ๊ธฐ๋Šฅ

  • SSL ํ„ฐ๋ฏธ๋„ค์ด์…˜
    • https ์ปค๋„ฅ์…˜์„ ๋ณตํ˜ธํ™”ํ•˜์—ฌ http๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„์— ์ „๋‹ฌํ•จ์œผ๋กœ์จ ์„œ๋ฒ„์— ๋ณตํ˜ธํ™”ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ๋ถ€ํ•˜๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์ค๋‹ˆ๋‹ค.
  • ์บ์‹ฑ
    • nginx์„œ๋ฒ„๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๊ฐ€๊น๊ฒŒ ๋ฐฐ์น˜ํ•˜์—ฌ ์ธ๋ฉ”๋ชจ๋ฆฌ๋ฐฉ์‹์œผ๋กœ ์ง€์—ฐ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • HSTS
  • CORS ์ฒ˜๋ฆฌ
  • TCP/UDP ์ปค๋„ฅ์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
  • HTTP/2

์ฐธ๊ณ 

profile
๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€