Dev/CS

🐳 도커(Docker) 프록시 네트워크 설정

싹다배워 2026. 1. 21. 16:02
반응형

포트 직접 접근에서 프록시 네트워크 방식으로 전환한 이유

기존에는 아래처럼 포트를 직접 열어서 접근했다.

http://도메인:8080
http://도메인:9000

 

이 방식은 간단하지만, 운영 환경에서는 여러 문제가 있다.


포트 직접 노출 방식의 한계

  • 서비스가 늘어날수록 포트 관리 지옥
  • 방화벽, 보안 장비 설정 복잡
  • 서비스 구조가 외부에 그대로 노출
  • HTTPS 적용 시 서비스마다 설정 필요

“서비스가 많아질수록 관리 포인트가 기하급수적으로 늘어난다.”


프록시 네트워크 방식이란?

외부에서는 단 하나의 진입점(WEB) 만 바라보고 실제 서비스들은 Docker 내부 네트워크에서만 통신하게 만드는 구조다.

외부 사용자
   ↓ HTTPS
[Nginx Reverse Proxy]
   ↓ Docker Network
[서비스 / 배치 / 관리자]


#Reverse Proxy  : 요청을 대신 받아 내부 서비스로 전달
#Docker Network : 컨테이너 간 전용 가상 네트워크
#Expose         : 외부 노출 없이 내부 통신만 허용

1. Docker 네트워크 기반 서비스 분리

외부 포트는 Nginx만 사용

ports: 
	- "80:80" 
	- "443:443"

내부 서비스는 expose만 사용

expose: 
	- "8080"

 

2. Docker Compose – 프록시 네트워크 구성

/* docker-compose.yml */

services:
  nginx:
    image: nginx:stable
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      //생략
    depends_on:
      //생략
    networks:
      - proxy-net

  app:
    build: //생략
    container_name: //생략
    expose:
      - "8080"
    networks:
      - proxy-net

networks:
  proxy-net:
    external: true
  • app은 포트 공개 X
  • nginx만 외부 진입

3. Nginx Reverse Proxy 설정

// ./nginx/nginx.conf

server {
    listen 443 ssl;
    server_name 도메인;

    //SSL 설정 (생략)
    
    location / {
        proxy_pass http://app:8080;

        # 클라이언트 정보 전달 (중요)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

4. 경로 기반 서비스 분리 (test 예시)

// ./nginx/nginx.conf

server {
	//SSL, 도메인명, 포트설정 생략
    location / {
        proxy_pass http://app:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }

    location /test/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

        proxy_pass http://test:9000/;
    }
}
 
위와 같이 설정할 경우 http://도메인/test 경로를 통해 접근 가능

 

마무리

포트를 직접 여는 방식은 개발 단계에서는 편하지만
운영 환경에서는 프록시 네트워크가 사실상 필수에 가깝다.

 

특히 Docker 환경에서는 Reverse Proxy + Docker Network 조합이 가장 현실적이고 안정적인 선택이었다.


반응형