nginx 1.18.0 ๋ฆด๋ฆฌ์Šค

XNUMX๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ œ์‹œ ๊ณ ์„ฑ๋Šฅ HTTP ์„œ๋ฒ„์™€ ๋ฉ€ํ‹ฐํ”„๋กœํ† ์ฝœ ํ”„๋ก์‹œ ์„œ๋ฒ„์˜ ์ƒˆ๋กœ์šด ์•ˆ์ •์ ์ธ ๋ธŒ๋žœ์น˜ nginx 1.18.0, ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ 1.17.x ๋‚ด์— ๋ˆ„์ ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํก์ˆ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์•ˆ์ • ๋ธŒ๋žœ์น˜ 1.18์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜ ๋ฐ ์ทจ์•ฝ์  ์ œ๊ฑฐ์™€ ๊ด€๋ จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. nginx 1.19์˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ณง ํ˜•์„ฑ๋  ์˜ˆ์ •์ด๋ฉฐ, ๊ทธ ์•ˆ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ๊ณ„์†๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํƒ€์‚ฌ ๋ชจ๋“ˆ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•  ์˜๋ฌด๊ฐ€ ์—†๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ, ์ถ”์ฒœ XNUMX๊ฐœ์›”๋งˆ๋‹ค ์ƒ์šฉ ์ œํ’ˆ Nginx Plus๊ฐ€ ์ถœ์‹œ๋˜๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์— ๋”ฐ๋ผ XNUMX์›” ๋ณด๊ณ ์„œ Netcraft nginx๋Š” ์ „์ฒด ํ™œ์„ฑ ์‚ฌ์ดํŠธ ์ค‘ 19.56%(20.73๋…„ ์ „ 21.02%, 27.64๋…„ ์ „ 10.03%)์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋Š” ์ด ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ์ธ๊ธฐ 4.77์œ„์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค(Apache์˜ ์ ์œ ์œจ์€ 36.91%, Google - 27.52%, Microsoft IIS - 24.73%) . ๋™์‹œ์— ๋ชจ๋“  ์‚ฌ์ดํŠธ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ nginx๋Š” ์„ ๋‘๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์‹œ์žฅ์˜ 12.85%(3.42๋…„ ์ „ XNUMX%)๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Apache์˜ ์ ์œ ์œจ์€ XNUMX%, Microsoft IIS - XNUMX%, Google - XNUMX%์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ „ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐฉ๋ฌธํ•œ 25.54๋งŒ ๊ฐœ์˜ ์‚ฌ์ดํŠธ ์ค‘ nginx์˜ ์ ์œ ์œจ์€ 26.22%(23.76๋…„ ์ „ 459%, 397๋…„ ์ „ XNUMX%)์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์•ฝ XNUMX์–ต XNUMX๋งŒ ๊ฐœ์˜ ์›น์‚ฌ์ดํŠธ๊ฐ€ Nginx๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(XNUMX๋…„ ์ „ XNUMX์–ต XNUMX๋งŒ ๊ฐœ). ์— ์˜ํ•ด ์— ๋”ฐ๋ฅด๋ฉด W3Techs nginx๋Š” ๊ฐ€์žฅ ๋งŽ์ด ๋ฐฉ๋ฌธํ•œ ๋ฐฑ๋งŒ ๊ฐœ์˜ ์‚ฌ์ดํŠธ ์ค‘ 31.9%์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž‘๋…„ 41.8์›” ์ด ์ˆ˜์น˜๋Š” ์ „๋…„๋„ 38%, ์ฆ‰ 43.6%์˜€์Šต๋‹ˆ๋‹ค(์ด ๊ฐ์†Œ๋Š” Cloudflare http ์„œ๋ฒ„์˜ ๋ณ„๋„ ๊ณ„์ •์œผ๋กœ์˜ ์ „ํ™˜์œผ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค). Apache์˜ ์ ์œ ์œจ์€ 38.9%์—์„œ 8.6%๋กœ, Microsoft IIS์˜ ์ ์œ ์œจ์€ 8.3%์—์„œ XNUMX%๋กœ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฌ์‹œ์•„์—์„œ๋Š” nginx ์‚ฌ์šฉ ๋œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐฉ๋ฌธํ•œ ์‚ฌ์ดํŠธ ์ค‘ 78.9%(81๋…„ ์ „ - XNUMX%).

1.17.x ์—…์ŠคํŠธ๋ฆผ ๋ธŒ๋žœ์น˜ ๊ฐœ๋ฐœ ์ค‘์— ์ถ”๊ฐ€๋œ ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๊ฐœ์„  ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ง€์‹œ๋ฌธ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋„_req_dry_run, ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ•๋„์—๋Š” ์ œํ•œ์ด ์ ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ(๋น„์œจ ์ œํ•œ ์—†์ด) โ€‹โ€‹๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ๊ณ„์† ๊ณ ๋ คํ•˜๋Š” ์‹œํ—˜ ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์‹œ๋ฌธ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Limit_conn_dry_runngx_http_limit_conn_module ๋ชจ๋“ˆ์„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ์—์„œ๋Š” ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ์ œํ•œ๋˜์ง€ ์•Š์ง€๋งŒ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์‹œ์–ด "๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.์ธ์ฆ_์ง€์—ฐ"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‘๋‹ต ์ฝ”๋“œ 401๋กœ ์Šน์ธ๋˜์ง€ ์•Š์€ ์š”์ฒญ์— ์ง€์—ฐ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ถ”์ธก์˜ ๊ฐ•๋„๋ฅผ ์ค„์ด๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ, ์ ‘๊ทผ์ด ์ œํ•œ๋œ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ๋•Œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ธก์ •(ํƒ€์ด๋ฐ ๊ณต๊ฒฉ)์„ ์กฐ์ž‘ํ•˜๋Š” ํ–‰์œ„ ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ•˜์œ„ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ๋˜๋Š” JWT (JSON ์›น ํ† ํฐ);
  • ์ŠคํŠธ๋ฆผ ๋ชจ๋“ˆ์˜ "proxy_upload_rate" ๋ฐ "proxy_download_rate" ์ง€์‹œ๋ฌธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ "limit_rate" ๋ฐ "limit_rate_after" ์ง€์‹œ๋ฌธ์— ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์‹œ๋ฌธ์—์„œ grpc_pass ์ฃผ์†Œ๋ฅผ ์ •์˜ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ๊ฐ€ ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ์ง€์ •๋˜๋ฉด ์„ค๋ช…๋œ ์„œ๋ฒ„ ๊ทธ๋ฃน ์ค‘์—์„œ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด ํ™•์ธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. $proxy_protocol_server_addr ะธ $proxy_protocol_server_port์—๋Š” PROXY ํ”„๋กœํ† ์ฝœ ํ—ค๋”์—์„œ ์–ป์€ ์„œ๋ฒ„ ์ฃผ์†Œ์™€ ํฌํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์—์„œ๋Š” ngx_stream_limit_conn_module ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋จ $limit_conn_status, ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค: PASSED, REJECTED ๋˜๋Š” REJECTED_DRY_RUN;
  • ๋ชจ๋“ˆ์—์„œ๋Š” ngx_http_limit_req_module ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋จ $limit_req_status, ์š”์ฒญ ๋„์ฐฉ ์†๋„ ์ œํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค: PASSED, DELAYED, REJECTED, DELAYED_DRY_RUN ๋˜๋Š” REJECTED_DRY_RUN;
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“ˆ์€ ์กฐ๋ฆฝ๋ฉ๋‹ˆ๋‹ค. ngx_http_postpone_filter_module;
  • ๋‚ด์žฅ๋œ Perl ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์ œ๊ณตํ•˜๋Š” $r->internal_redirect() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ช…๋œ "์œ„์น˜" ๋ธ”๋ก์„ ํ† ๊ธ€ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋ฐฉ๋ฒ•์—๋Š” ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ URI ์ฒ˜๋ฆฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • "upstream" ์„ค์ • ๋ธ”๋ก์—์„œ "upstream" ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐํ•ด์‹œยป ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ ํ‚ค ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ์ด์ œ ๊ท ์ผ ๋ฐธ๋Ÿฐ์‹ฑ ๋ชจ๋“œ(๋ผ์šด๋“œ ๋กœ๋นˆ)๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋น ๋ฅธ ์—ฐ๊ฒฐ์—์„œ ์ฝ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ioctl(FIONREAD) ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€