๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/network

[Proxy] ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ Reverse Proxy ์ •๋ฆฌ

by ๋ฐ”์ฟ„๋ฆฌ 2025. 1. 24.

๊ฐœ์š”

 

ํŠน์ • port์˜ ์„œ๋น„์Šค์—๋งŒ HTTPS 443 SSL ์ ์šฉํ•˜๊ธฐ

๊ฐœ์š”์šด์˜์ค‘์ธ ์„œ๋น„์Šค ์ค‘์—์„œ 8003 ํฌํŠธ์—๋งŒ ssl ์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.์ง„ํ–‰ ์š”์•ฝ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ์—†์ด IP๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ OpenSSL๋กœ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.NGINX๋ฅผ HTTPS ์ฒ˜๋ฆฌ ๋‹ด๋‹น์ž๋กœ ๋‘๊ณ ,

bonory.tistory.com

8003 ํฌํŠธ์—๋งŒ https ์ ์šฉํ•˜๋ฉด์„œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

ํ™•์ธ

Proxy ์„ค์ • ์ฝ”๋“œ:

location / {
    proxy_pass http://127.0.0.1:8003;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Forwarded-Proto https;
}
  • proxy_pass http://127.0.0.1:8003;
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ Nginx์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, Nginx๋Š” ํ•ด๋‹น ์š”์ฒญ์„ http://127.0.0.1:8003๋กœ ์ „๋‹ฌํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์„œ 127.0.0.1:8003์€ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(์˜ˆ: FastAPI,Node.js ๋“ฑ)
    • ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์— ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ํฌํŠธ๋ฅผ ์ง์ ‘ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • proxy_http_version 1.1;
    • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ๋•Œ HTTP/1.1์„ ์‚ฌ์šฉ
    • HTTP/1.1์€ WebSocket ์—ฐ๊ฒฐ ๋ฐ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”
  • proxy_set_header
    • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๋Š” ์š”์ฒญ ํ—ค๋”๋ฅผ Nginx๊ฐ€ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€
    • proxy_set_header Upgrade $http_upgrade;
      • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด WebSocket ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ, ์ด ํ—ค๋”๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ
      • WebSocket ์—ฐ๊ฒฐ์€ HTTP์—์„œ Upgrade ์š”์ฒญ์„ ํ†ตํ•ด ์„ค์ •๋˜๋ฏ€๋กœ ํ•„์ˆ˜!
    • proxy_set_header Connection "upgrade";
      • WebSocket ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Connection: upgrade ํ—ค๋”๋ฅผ ์ถ”๊ฐ€
    • proxy_set_header Host $host;
      • ์›๋ž˜ ์š”์ฒญ์˜ Host ํ—ค๋”๋ฅผ ์œ ์ง€
    • proxy_cache_bypass $http_upgrade;
      • WebSocket ์—ฐ๊ฒฐ์ด๋‚˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์€ ์บ์‹ฑํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    • proxy_set_header X-Forwarded-Proto https;
      • .js, .css ํŒŒ์ผ์„ ๋ชป ๊ฐ€์ง€๊ณ  ์™€์„œ ์ถ”๊ฐ€ํ•œ ์˜ต์…˜
      • ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTPS๋กœ ์š”์ฒญํ–ˆ์Œ์„ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์•Œ๋ ค์ค€๋‹ค.
      • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ HTTPS ํ”„๋กœํ† ์ฝœ์„ ์ธ์‹ํ•˜๊ณ , ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ

  • ๋ณด์•ˆ ๊ฐ•ํ™”:
    • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์‹ค์ œ ํฌํŠธ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ Nginx๋ฅผ ํ†ตํ•ด ์ œ์–ด๋˜๋ฏ€๋กœ SSL/TLS ์•”ํ˜ธํ™”๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ:
    • Nginx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์š”์ฒญ ๊ด€๋ฆฌ:
    • ์š”์ฒญ์— ๋Œ€ํ•œ ์บ์‹ฑ, ๋ฆฌ๋‹ค์ด๋ ‰์…˜, ํ—ค๋” ๋ณ€๊ฒฝ ๋“ฑ์„ Nginx ๋ ˆ๋ฒจ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ:
    • HTTP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ WebSocket ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋ก์‹œ

ํ”„๋ก์‹œ ์„œ๋ฒ„๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘๊ฐ„ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

์ข…๋ฅ˜ ์ฃผ์š” ํŠน์ง• ์‚ฌ์šฉ ์˜ˆ
๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋ณดํ˜ธ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ Nginx, Apache
ํฌ์›Œ๋“œ ํ”„๋ก์‹œ ํด๋ผ์ด์–ธํŠธ ๋ณดํ˜ธ, IP ์ˆจ๊น€ Squid Proxy
์˜คํ”ˆ ํ”„๋ก์‹œ ์ต๋ช…์„ฑ ์ œ๊ณต, ๋ณด์•ˆ ์œ„ํ—˜ ๊ณต๊ฐœ๋œ ํ”„๋ก์‹œ ์„œ๋ฒ„
ํˆฌ๋ช… ํ”„๋ก์‹œ ํด๋ผ์ด์–ธํŠธ ์„ค์ • ๋ถˆํ•„์š”, ๋„คํŠธ์›Œํฌ ์ œ์–ด ISP, ๋„คํŠธ์›Œํฌ ๋ชจ๋‹ˆํ„ฐ๋ง
๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋ก์‹œ API ๊ด€๋ฆฌ ๋ฐ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… Kong, AWS API Gateway
์›น ํ”„๋ก์‹œ ์›น ๊ธฐ๋ฐ˜ ํ”„๋ก์‹œ ๊ณต๊ณต Wi-Fi ๋ณด์•ˆ
SOCKS ํ”„๋ก์‹œ ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ ์ฒ˜๋ฆฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€์› P2P, ํŒŒ์ผ ์ „์†ก
์—ญ๋ฐฉํ–ฅ ์บ์‹ฑ ํ”„๋ก์‹œ ์บ์‹ฑ์œผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™” Varnish, Nginx Cache