[Docker๐Ÿณ] Proxy Server

Jeong SeongYunยท2022๋…„ 11์›” 6์ผ
0

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
10/10
post-thumbnail

์ด์ œ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค์€ ์–ด๋Š ์ •๋„ ์ตํ˜”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์‹ค์งˆ์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ช‡ ๊ฐ€์ง€ ๋” ์•Œ์•„์•ผ๋  ๊ธฐ์ดˆ์ ์ธ ๋‚ด์šฉ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Proxy๋„ ๊ทธ ์ค‘ ํ•˜๋‚˜์ฃ ! ํ”„๋ก์‹œ ํ”„๋ก์‹œ... ์˜ˆ์ „์— ์ธํ„ฐ๋„ท ์„ค์ •ํ•  ๋•Œ๋‚˜ ๋ดค๋˜ ๋‚ฏ์„  ๋‹จ์–ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฒ๋‹ˆ๋‹ค.

โ— Proxy Server

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค์— ์ ‘์†ํ•˜๊ฒŒ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„*

์›๋ž˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ , ์„œ๋ฒ„๊ฐ€ ์ด์— ๋ฆฌ์Šคํฐ์Šค๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹์ด์—ˆ์ง€๋งŒ
Proxy๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ค‘๊ฐ„์— ์œ„์น˜ํ•˜์—ฌ ๋Œ€์‹  ์š”์ฒญ์„ ๋ฐ›๊ฑฐ๋‚˜ ์„œ๋น™์„ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ๋กœ ๋ณด์•ˆ์ƒ ์ง์ ‘์ ‘๊ทผ์„ ๋ง‰์•„์•ผ ํ•  ๋•Œ๋‚˜ ์บ์‹œ๋ฅผ ์ €์žฅํ•˜์—ฌ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ ์ž๋ฃŒ : https://milkye.tistory.com/202

Forward Proxy

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋ฒ„์—์„œ ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ณ  ์„œ๋ฒ„ ๋Œ€์‹  ์ „๋‹ฌํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
๋“ค์–ด์˜ค๋Š” ์š”์ฒญ ์ค‘, proxy์—์„œ ์ž์ฒด์ ์œผ๋กœ ํŠน์ • ์„œ๋น„์Šค๋กœ์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋Œ€๋กœ ์ž์ฃผ ์ด์šฉํ•˜๋Š” ์ธํ„ฐ๋„ท ์„œ๋น„์Šค๋Š” ์บ์‰ฌ๋กœ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๋Œ€์‹  ๊บผ๋‚ด์คŒ์œผ๋กœ์„œ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ฃ .

๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋กœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Reverse Proxy

Forward์™€๋Š” ๋ฐ˜๋Œ€๋กœ, ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ์˜ ์š”์ฒญ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
์™ธ๋ถ€์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์ ์ ˆํ•œ ๋‚ด๋ถ€ ์„œ๋ฒ„์— ๋Œ€์‹  ์ ‘์†ํ•œ ํ›„
๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
๋ณด์•ˆ์ด ์ค‘์š”ํ•  ๋•Œ์™€, Load Balancing์—๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Load Balancing : ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ๋™์ผํ•œ ์„œ๋ฒ„๋ฅผ ๋ณต์ œํ•˜์—ฌ ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ!

Nginx Reverse Proxy์˜ ๊ตฌํ˜„

ํฌํŠธ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

๊ธฐ๋ณธ์ ์œผ๋กœ nginx๋กœ reverse proxy ์„œ๋ฒ„๋ฅผ ๋งŒ๋“  ๋‹ค์Œ, ํŠน์ • ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋ฉด ํŠน์ • ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ฒ„์˜ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ๋ณธ ์„ค์ •์„ ํ•ด์ค๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” nginxproxy๋Š” reverse proxy ์—ญํ• ์„ ํ•˜๋Š” nginx์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ‘์— ์žˆ๋Š” 2๊ฐœ๋Š” ๊ฐ๊ฐ nginx๋กœ ๋งŒ๋“  ์„œ๋ฒ„์™€ apache๋กœ ๋งŒ๋“  ์„œ๋ฒ„๊ฐ€ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ถ”๊ฐ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€ ์„œ๋ฒ„๋Š” port๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ์˜ ์ ‘์†์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ
proxy ์„œ๋ฒ„์—” port๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ์˜ ์ ‘์†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

8080, 8081์„ ์—ด์–ด๋†”์„œ ์ด ํฌํŠธ๋กœ ์ ‘์†ํ•˜๋ฉด ๊ฐ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ ์ค๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•œ ์„ค์ •ํŒŒ์ผ ์ค‘์—์„œ ์ค‘์š”ํ•œ ์˜ต์…˜ ๋ช‡ ๊ฐ€์ง€๋งŒ ๋ณด๊ณ  ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค

upstream
server์˜ 'nginx'๋ผ๊ณ  ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ 80๋ฒˆ port๋กœ ์ ‘์†ํ•˜๊ฒ ๋‹ค
๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. docker-nginx, nginx์™€ ๊ฐ™์€ ์ด๋ฆ„์€ docker-compose ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋ฌด๊ฑฐ๋‚˜ ์ง€์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

server
์„œ๋น„์Šค ๋ณ„๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด์šฉ์„ ๋ณด์‹œ๋ฉด listen ์˜ต์…˜์„ ํ†ตํ•ด 8080๋ฒˆ ํฌํŠธ๋งŒ ๋ฐ›๊ฒŒ ํ–ˆ๊ณ 
์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ proxy pass ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ์š”์ฒญ์„ docker-nginx๋ผ๊ณ  ํ•˜๋Š” ๊ฒฝ๋กœ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์„ค์ •์„ ์ดํ•ดํ•˜์‹œ๊ณ  docker-compose up -d๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ์‹œ๊ณ 

ec2 ์ธ์Šคํ„ด์Šค์— ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์— 8080ํฌํŠธ์™€ 8081ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ .... ์ ‘์†ํ•ด์ฃผ์‹œ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8080์œผ๋กœ ๋“ค์–ด๊ฐ”์„ ๋• nginx์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ–ˆ์œผ๋ฏ€๋กœ nginx์˜ ํ™”๋ฉด์ด ๋œจ๊ณ 
8081๋กœ ๋“ค์–ด๊ฐ”์„ ๋• apache์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ–ˆ์œผ๋ฏ€๋กœ apache์˜ ํ™”๋ฉด์ด ๋œจ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ฃ .

๊ฒฝ๋กœ๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ

์ง€๋‚œ ํฌ์ŠคํŠธ ๋•Œ ์•Œ์•„๋ดค๋˜ location์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์• ์ดˆ์— ๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•ด์„œ ๊ธฐ๋Šฅ์— ๋งž๋Š” ํด๋”์— ์ฐพ์•„๊ฐ€๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.


์ด ๋ถ€๋ถ„์˜ listen์„ 80์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  nginx์˜ ๊ฒฝ์šฐ์™€ apache์˜ ๊ฒฝ์šฐ๋ฅผ location์œผ๋กœ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค.

์œ„์˜ ๋‚ด์šฉ์€ ๊ฒฝ๋กœ๊ฐ€ ๋งŒ์•ฝ /blog/๋กœ ๋“ค์–ด์˜ค๋ฉด nginx๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ ,
/community/๋กœ ๋“ค์–ด์˜ค๋ฉด apache๋กœ ์ฒ˜๋ฆฌํ•˜๋ผ๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์œ„์˜ ์„ค์ •๋Œ€๋กœ docker compose๋กœ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์‹คํ–‰ ์‹œํ‚จ ๋’ค์—, ํ•ด๋‹น ๊ฒฝ๋กœ์— blog/๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ์•ˆ์— html์„ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ip/blog/test.html ์— ๋“ค์–ด๊ฐ€์ฃผ๋ฉด...

์ด๋ ‡๊ฒŒ ์œ„์—์„œ ์ž‘์„ฑํ–ˆ๋˜ test.html์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๊ณผ์ •์€

  1. nginx ์ปจํ…Œ์ด๋„ˆ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ด (docker exec -it ~~ )
  2. deafult.conf ํŒŒ์ผ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ๋กœ์ƒ์—์„œ blog ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ์ด ์•ˆ์— ๋ณด์—ฌ์ค„ ํŒŒ์ผ์„ ๋งŒ๋“ฆ

์œผ๋กœ ์š”์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ apache๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ community ํด๋”์— htmlํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์ฃผ์†Œ์—
ip/community/test.html์„ ์ž…๋ ฅํ•˜๋ฉด

์•„๊นŒ ์ž‘์„ฑํ•ด๋†จ๋˜ apache TEST ๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€์„œ๋ฒ„ ์š”์ฒญ ๊ฒฝ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

Proxy ์„œ๋ฒ„์— ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๊ทธ๋Œ€๋กœ ๋‚ด๋ถ€ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ
Proxy ์„œ๋ฒ„์— ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋‚ด๋ถ€ ์„œ๋ฒ„์˜ ๊ฒฝ๋กœ ์„ค์ •์— ๋งž๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.
ex) proxy : www.blog.index.html ==> nginx : www.index.html

์œ„์™€ ๊ฐ™์€ ์„ค์ • ๋ณ€๊ฒฝ์„ ์œ„ํ•ด์„œ๋Š” nginx rewrite ์˜ต์…˜์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

rewrite๋Š” ์ •๊ทœํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ ํŠน์ • URL๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ๋ช‡๊ฐ€์ง€ ์˜ต์…˜์ด ํ•„์š”ํ•˜๋ฉด ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

rewrite ์˜ต์…˜ : rewrite regex URL [flag]
nginx์—์„œ ์‚ฌ์šฉํ•˜๋Š” regex๋Š” PCRE ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
URL : ๋ณ€๊ฒฝํ•  url ๊ธฐ์žฌ
flag : ์—ฌ๋Ÿฌ ๊ฐœ์˜ location์ด ์„ค์ • ๋˜์–ด ์žˆ์„ ๋•Œ, ๋ณ€๊ฒฝ๋œ url์ด ๋‹ค๋ฅธ location์— ๋งค์นญ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
ex ) break flag ์˜ต์…˜์€ ํ˜„์žฌ์˜ location ์„ค์ •๋งŒ ๋”ฐ๋ฅด๊ณ  ๋๋ƒ…๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

proxy : http://123123/blog/test.html
nginx : http://123123/test.html

rewrite ^/blog(.*)$ $1 break;
  1. ^ : /blog๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.

  2. . : ์ž„์˜์˜ ํ•œ ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  3. * : 0ํšŒ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  4. $ : ๋๋‚˜๋Š” ๋ฌธ์ž์—ด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    -> ^/blog(.*)$ : /blog๋ฅผ ์‹œ์ž‘ํ•˜๊ณ ๋ถ€ํ„ฐ ๊ทธ ๋‹ค์Œ ๋ฌธ์ž์—ด๋ถ€ํ„ฐ ๋๊นŒ์ง€
    => /blog/test.html

  5. $1 : ๋ฐ”๋€” ์œ„์˜ ๊ด„ํ˜ธ ์•ˆ์— ๋“ค์–ด๊ฐˆ url์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
    => /test.html

์ฆ‰, ์œ„์˜ ์˜ต์…˜์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

(1) /blog/test.html์„ ๋ฐ›์Œ
(2) regex์— ๋”ฐ๋ผ blog/test.html์„ $1๋กœ ๋ณ€๊ฒฝ
(3) $1์€ ์•„๊นŒ ์„ค์ •ํ•ด๋†จ๋˜ test.html
(4) ์ตœ์ข…์ ์œผ๋กœ /blog/test.html์€ test.html์ด ๋จ

profile
๋ฌผ์–ด๋ณด๋ฉด ๋Œ€๋‹ตํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์Ÿ์ด

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