HTTP/TCP ๋ฐธ๋Ÿฐ์„œ HAProxy 2.0 ์ถœ์‹œ

๊ฒŒ์‹œ ๋จ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋ฆด๋ฆฌ์Šค HAํ”„๋ก์‹œ 2.0์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์š”์†Œ(์˜ˆ: ์„œ๋ฒ„ ๊ฐ€์šฉ์„ฑ ํ™•์ธ, ๋กœ๋“œ ์ˆ˜์ค€ ํ‰๊ฐ€, DDoS ๋Œ€์‘ ์กฐ์น˜ ํฌํ•จ)๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„œ๋ฒ„ ๊ทธ๋ฃน ๊ฐ„์— HTTP ํŠธ๋ž˜ํ”ฝ ๋ฐ ์ž„์˜ TCP ์š”์ฒญ์„ ๋ถ„์‚ฐํ•˜๊ณ  ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( ์˜ˆ๋ฅผ ๋“ค์–ด HTTP ํ—ค๋”๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ , ์ž˜๋ชป๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „์†ก์„ ํ•„ํ„ฐ๋งํ•˜๊ณ , SQL ๋ฐ XSS ๋Œ€์ฒด๋ฅผ ์ฐจ๋‹จํ•˜๊ณ , ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ ์—์ด์ „ํŠธ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HAProxy๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋‹ค ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๊ณต๊ธ‰ GPLv2์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter ๋ฐ Vimeo๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ๋Œ€๊ทœ๋ชจ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ฆด๋ฆฌ์Šค ๊ธฐ๋Šฅ:

  • ์ƒˆ๋กœ์šด API ๋„์ž… ๋ฐ์ดํ„ฐ ๊ณ„ํš, REST Web API๋ฅผ ํ†ตํ•ด ์ฆ‰์‹œ HAProxy ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐฑ์—”๋“œ์™€ ์„œ๋ฒ„๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๊ณ , ACL์„ ์ƒ์„ฑํ•˜๊ณ , ์š”์ฒญ ๋ผ์šฐํŒ…์„ ๋ณ€๊ฒฝํ•˜๊ณ , IP์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ ๋ฐ”์ธ๋”ฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ ์ฝ”์–ด CPU์—์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด HAProxy์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” nbthread ์ง€์‹œ์–ด๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ ์ˆ˜๋Š” ํ˜„์žฌ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ CPU ์ฝ”์–ด์— ๋”ฐ๋ผ ์„ ํƒ๋˜๋ฉฐ, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด XNUMX๊ฐœ ์Šค๋ ˆ๋“œ์ž…๋‹ˆ๋‹ค. ์—„๊ฒฉํ•œ ์ œํ•œ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ ์˜ต์…˜ MAX_THREADS ๋ฐ MAX_PROCS๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์Šค๋ ˆ๋“œ ๋ฐ ํ”„๋กœ์„ธ์Šค ์ˆ˜์˜ ์ƒํ•œ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ์— ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ”์ธ๋”ฉ ์ง€์‹œ๋ฌธ์˜ ์‚ฌ์šฉ์ด ๋‹จ์ˆœํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ค์ • ์‹œ ๋” ์ด์ƒ ํ”„๋กœ์„ธ์Šค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ๊ฒฐ์€ ํ™œ์„ฑ ์—ฐ๊ฒฐ ์ˆ˜์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•  ๋•Œ ๋กœ๊ทธ ์„ค์ •์ด ๋‹จ์ˆœํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋กœ๊ทธ๋ฅผ stdout ๋ฐ stderr๋Š” ๋ฌผ๋ก  ๊ธฐ์กด ํŒŒ์ผ ์„ค๋ช…์ž(์˜ˆ: "log fd@1 local0")๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • HTX(Native HTTP Representation) ์ง€์›์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์—”๋“œ ํˆฌ ์—”๋“œ HTTP/2, ๋ ˆ์ด์–ด 7 ์žฌ์‹œ๋„ ๋ฐ gRPC์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ท ํ˜•์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTX๋Š” ํ—ค๋”๋ฅผ ์ œ์ž๋ฆฌ์—์„œ ๊ต์ฒดํ•˜์ง€ ์•Š์ง€๋งŒ ๋ชฉ๋ก ๋์— ์ƒˆ ํ—ค๋”๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์œผ๋กœ ์ˆ˜์ • ์ž‘์—…์„ ์ค„์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ™•์žฅ๋œ ๋ณ€ํ˜•์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ  ํ—ค๋”์˜ ์›๋ž˜ ์˜๋ฏธ๋ฅผ ๋ณด์กดํ•˜๋ฉฐ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTTP/2๋ฅผ HTTP/1.1๋กœ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด
  • ์—”๋“œํˆฌ์—”๋“œ HTTP/2 ๋ชจ๋“œ(ํ”„๋ก์‹œ์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ํฌํ•จํ•˜์—ฌ HTTP/2์˜ ๋ชจ๋“  ๋‹จ๊ณ„ ์ฒ˜๋ฆฌ)์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • gRPC ํ”„๋กœํ† ์ฝœ์˜ ์–‘๋ฐฉํ–ฅ ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ง€์›์€ gRPC ์ŠคํŠธ๋ฆผ ๊ตฌ๋ฌธ ๋ถ„์„, ๊ฐœ๋ณ„ ๋ฉ”์‹œ์ง€ ๊ฐ•์กฐ ํ‘œ์‹œ, ๋กœ๊ทธ์— gRPC ํŠธ๋ž˜ํ”ฝ ๋ฐ˜์˜, ACL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. gRPC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ”์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gRPC์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ HTTP/2 ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ์‚ฌ์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์„ค์ • ๋ฌธ์ œ์™€ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์‘๋‹ต์ด ์—†๊ฑฐ๋‚˜ ๋นˆ ์‘๋‹ต์ด ์žˆ๋Š” ๊ฒฝ์šฐ) "๋ ˆ์ด์–ด 7 ์žฌ์‹œ๋„" ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. POST ์š”์ฒญ). ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด "http-request" ์˜ต์…˜์— "disable-l7-retry" ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’, ์ˆ˜์‹  ๋ฐ ๋ฐฑ์—”๋“œ ์„น์…˜์—์„œ ๋ฏธ์„ธ ์กฐ์ •์„ ์œ„ํ•ด "retry-on" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ „์†ก์—๋Š” all-retryable-errors, none, conn-failure,empty-response,junk-response, response-timeout, 0rtt-rejected ๋ฐ ๋ฐ˜ํ™˜ ์ƒํƒœ ์ฝ”๋“œ(404 ๋“ฑ)์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ๊ณผ ๊ฐ™์€ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ;
  • HAProxy์šฉ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์‹คํ–‰ ํŒŒ์ผ ํ˜ธ์ถœ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด Data Plan API(/usr/sbin/dataplaneapi)์™€ ๋‹ค์–‘ํ•œ Offload ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ์—”์ง„์€ ์ด๋Ÿฌํ•œ ์™ธ๋ถ€ ํ•ธ๋“ค๋Ÿฌ์˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

  • SPOE(์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ์˜คํ”„๋กœ๋“œ ์—”์ง„) ๋ฐ SPOP(์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ์˜คํ”„๋กœ๋“œ ํ”„๋กœํ† ์ฝœ) ํ™•์žฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด .NET Core, Go, Lua ๋ฐ Python์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ํ™•์žฅ ๊ฐœ๋ฐœ์ด C์—์„œ๋งŒ ์ง€์›๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ„๋„์˜ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ฏธ๋Ÿฌ๋งํ•˜๊ธฐ ์œ„ํ•œ ์™ธ๋ถ€ spoa-mirror ์ฒ˜๋ฆฌ๊ธฐ(/usr/sbin/spoa-mirror)๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์‹ค์ œ ๋ถ€ํ•˜์—์„œ ์‹คํ—˜ ํ™˜๊ฒฝ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ํŠธ๋ž˜ํ”ฝ์˜ ์ผ๋ถ€๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด).
  • ๋„์ž… HAProxy Kubernetes ์ˆ˜์‹  ์ปจํŠธ๋กค๋Ÿฌ Kubernetes ํ”Œ๋žซํผ๊ณผ์˜ ํ†ตํ•ฉ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์œผ๋กœ ํ†ต๊ณ„๋ฅผ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ ๋ฉ”ํ…Œ์šฐ์Šค;
  • HAProxy๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ”ผ์–ด ํ”„๋กœํ† ์ฝœ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Heartbeat ๋ฐ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ์ „์†ก์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ง€์›์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • "sample" ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ "log" ์ง€์‹œ์–ด์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์˜ ์ผ๋ถ€(์˜ˆ: 1๊ฐœ ์ค‘ 10๊ฐœ)๋งŒ ๋กœ๊ทธ์— ๋คํ”„ํ•˜์—ฌ ๋ถ„์„ ์ƒ˜ํ”Œ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™ ํ”„๋กœํŒŒ์ผ๋ง ๋ชจ๋“œ(auto, on ๋ฐ off ๊ฐ’์„ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” profiling.tasks ์ง€์‹œ์–ด)๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 1000ms๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ž๋™ ํ”„๋กœํŒŒ์ผ๋ง์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ API์— "show profiling" ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ๊ฑฐ๋‚˜ ๋กœ๊ทธ์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SOCKS4 ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋น ๋ฅด๊ฒŒ TCP ์—ฐ๊ฒฐ์„ ์—ฌ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜(TFO - TCP Fast Open, RFC 7413)์— ๋Œ€ํ•œ ์—”๋“œํˆฌ์—”๋“œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ํ•˜๋‚˜์˜ ์š”์ฒญ์œผ๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์—ฐ๊ฒฐ ์„ค์ • ๋‹จ๊ณ„ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „ํ†ต์ ์ธ 3๋‹จ๊ณ„ ์—ฐ๊ฒฐ ํ˜‘์ƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์„ค์ • ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ์ž‘์—…์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ URL์„ ๋ฐ”๊พธ๋ ค๋ฉด "http-request replacement-uri";
    • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ "tcp-request content do-resolve" ๋ฐ "http-request do-resolve"
    • "tcp-request content set-dst" ๋ฐ "tcp-request content set-dst-port"๋Š” ๋Œ€์ƒ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ณ€ํ™˜ ๋ชจ๋“ˆ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • AES128-GCM, AES192-GCM ๋ฐ AES256-GCM ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์„ ํ•ด๋…ํ•˜๋Š” ๊ฒฝ์šฐ aes_gcm_dev
    • ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋ฉ”์‹œ์ง€์—์„œ ํ•„๋“œ๋ฅผ ์ถ”์ถœํ•˜๋Š” protobuf;
    • ungrpc๋Š” gRPC ๋ฉ”์‹œ์ง€์—์„œ ํ•„๋“œ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

    ์ถœ์ฒ˜ : opennet.ru

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