Nginx 리버스 프록시 패턴

Nginx 리버스 프록시 + Docker Compose 패턴

서브도메인별로 요청을 라우팅하고, 내부 네트워크를 분리하는 다중 서비스 구성 패턴

아키텍처

사용자 → DNS → Nginx 컨테이너(80/443)
                  ├─ app1.domain.com → App1 컨테이너
                  └─ app2.domain.com → App2 컨테이너
                                          └─ DB 컨테이너 (외부 차단)

Docker Compose 네트워크 분리

services:
  nginx_proxy:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - web_network

  app1:
    build: ./app1
    networks:
      - web_network        # Nginx와 통신
      - internal_db_network  # DB와 통신

  app1_db:
    image: mysql:8.0
    networks:
      - internal_db_network  # 외부 접근 차단

networks:
  web_network:
    external: true
  internal_db_network:
    internal: true           # 외부 노출 없음

진단 명령어

# 컨테이너 내부 설정 파일 확인 (볼륨 마운트 검증)
docker exec nginx_proxy cat /etc/nginx/nginx.conf

# 포트 점유 프로세스 확인
sudo lsof -i :80

# Nginx 컨테이너 재시작 (설정 변경 반영 안 될 때)
docker compose restart nginx_proxy

docker compose up / reload로 반영 안 될 때는 restart로 프로세스 재시작 필요

관련 개념