codingstairs
노트에듀라이프연락
⌕검색⌘K
koen

Navigation

  • Intro
  • Blog
  • Life

연락하기

로그인 없이도 보낼 수 있어요. 답변이 필요하면 이메일을 함께 적어 주세요.

  • 익명 폼으로 의견 남기기 →
  • ✉ warragon112@gmail.com
  • 카카오톡 오픈채팅 ↗

© 2026 codingstairs

  • 노트
  • 에듀
  • 검색
  • 라이프
  • 연락
  • 약관
  • RSS
  • GitHub
에듀›Docker · Caddy · 클라우드 10단계 배포 옵션›3단계

3단계

3단계 — Caddy 로 자동 HTTPS

0회 조회

3단계 — Caddy 로 자동 HTTPS

Nginx 와 비슷하지만 자동 HTTPS 가 기본이에요. Let's Encrypt 인증서 발급·갱신을 Caddy 가 알아서 합니다.

Caddyfile — 한 도메인 = 세 줄

example.com {
    reverse_proxy app:3000
}

이게 끝. Caddy 가 자동으로 HTTPS 인증서를 받아 80→443 리다이렉트 + 압축까지 해 줘요.

여러 서비스를 한 Caddy 로

api.example.com {
    reverse_proxy backend:8080
}

example.com {
    reverse_proxy frontend:3000
}

admin.example.com {
    reverse_proxy admin:3000
}

서브도메인 별로 다른 컨테이너 라우팅 — 단일 80/443 포트 공유.

docker-compose 통합

services:
  caddy:
    image: caddy:2-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    restart: unless-stopped

  app:
    build: .
    expose:
      - "3000"            # ← Caddy 만 접근 가능, 외부 노출 X
    # ports: 명시 X — Caddy 가 reverse_proxy 로 도달

volumes:
  caddy-data:
  caddy-config:

caddy-data 는 인증서 캐시 — 반드시 named volume 으로 (재시작 시 사라지면 갱신 한도 초과 위험).

헤더 통과

reverse_proxy 는 기본으로 X-Forwarded-* 를 자동 추가. 그런데 원본 호스트 가 필요한 앱 (예: i18n redirect 가 host 기반) 은 명시:

example.com {
    reverse_proxy app:3000 {
        header_up Host {host}
        header_up X-Forwarded-Host {host}
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-Port "443"
    }
}

운영 팁 5

  1. Caddy data volume 은 절대 삭제 X — Let's Encrypt rate limit (주 5회) 위반 위험
  2. 로컬 개발용 자체 서명 인증서 — tls internal 한 줄로
  3. Caddyfile 변경 시 — docker exec caddy caddy reload 또는 컨테이너 재시작
  4. 단일 컨테이너 1대 운영 — Caddy 1대로 도메인 수십 개 처리 OK
  5. 로깅 — log { output file /var/log/access.log } 로 접근 로그

직접 해 보기

DuckDNS 로 무료 도메인 (yourname.duckdns.org) 을 받고, 위 docker-compose 를 띄운 뒤 https://yourname.duckdns.org 에 접근. 자물쇠 아이콘이 보이면 성공.

더 깊이

  • Caddy 노트

다음 단계

4단계에서는 외부 노출을 최소화 하는 SSH 터널 + 루프백 바인딩 패턴을 배워요.

← 2단계

2단계 — docker-compose 패턴

4단계 →

4단계 — SSH 터널 + 루프백 바인딩