iptime 공유기, 윈도우즈, 도커 데스크탑, wsl2, 우분투, nginx 도커 구조에서 메인도메인 및 서브도메인 ssl 한번에 하기 상세 가이드

ipTIME 공유기, Windows, Docker Desktop, WSL2, Ubuntu, Nginx Docker 환경에서 메인도메인 및 서브도메인에 SSL(HTTPS)을 한 번에 적용하는 상세 가이드
아래는 로컬/개발환경 또는 저비용 서버에서 ipTIME 공유기와 윈도우 기반 Docker Desktop, WSL2, Ubuntu, nginx 컨테이너를 활용하여 메인 도메인 및 여러 서브도메인에 SSL 인증서를 한번에 적용하는 방법입니다.
전체 구조 개요
- ipTIME 공유기: 외부 포트 → 내부(WSL2 Ubuntu) 프록시
- Windows + Docker Desktop + WSL2: 도커 엔진이 WSL2(우분투) 기반에서 실행됨
- nginx 도커 컨테이너: 리버스 프록시, HTTPS 처리
- Certbot(또는 다른 ACME 클라이언트): SSL 인증서 자동 발급/갱신(Let’s Encrypt 사용 권장)
- 여러 도메인, 서브도메인: 예시) example.com, www.example.com, api.example.com 등
1. ipTIME 공유기 포트포워딩 설정
- 80(HTTP), 443(HTTPS) 포트를 내부 Ubuntu 서버(WSL2)의 IP로 포워딩
- 공유기 설정 → 고급설정 → NAT/라우터 관리 → 포트포워드
- 외부포트 80/443 → 내부포트 80/443 (내부IP: WSL2 Ubuntu IP 주소)
- 반드시 패킷이 WSL2 우분투까지 올 수 있도록 Windows 방화벽, 공유기 방화벽도 확인
2. Docker Desktop 및 WSL2 환경 준비
- Docker Desktop을 설치하고, WSL2 기반으로 실행([2] 참고)
- Ubuntu 설치
- Docker Desktop → Settings → Resources → WSL Integration에서 Ubuntu 활성화
3. nginx 및 certbot 도커 컴포즈 파일 작성
프로젝트 디렉터리 구조 예시:
project-root/
│
├── docker-compose.yml
├── nginx/
│ ├── nginx.conf
│ └── conf.d/
│ └── default.conf
└── certbot/
docker-compose.yml 예시
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
depends_on:
- certbot
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
nginx 컨테이너에서 인증서 파일과 웹 인증 파일을 공유 디렉터리로 사용할 수 있도록 설정[1][3].
4. nginx 설정
nginx.conf
user nginx;
worker_processes auto;
events { worker_connections 1024; }
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name example.com www.example.com api.example.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
# SSL 설정은 인증서 발급 후 추가
}
인증서 발급을 위해 80포트 /.well-known/acme-challenge/ 경로를 certbot이 쓸 디렉터리로 연동[3].
5. 인증서 발급 (Certbot)
- 컨테이너 실행
$ docker-compose up -d
- 도메인별 인증서 발급
$ docker-compose run --rm certbot certonly \
--webroot --webroot-path=/var/www/certbot \
-d example.com -d www.example.com -d api.example.com
- 여러 도메인을 -d 옵션으로 연속 지정 가능, 한 번에 SSL 인증서 발급[3].
- 발급 후, ./certbot/conf/live/ 디렉터리에 인증서와 키 파일이 생성
6. nginx HTTPS 설정
default.conf 예시 (443 포트)
server {
listen 443 ssl;
server_name example.com www.example.com api.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://your_app_backend; # 실제 서비스로 프록시
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
여러 도메인을 한 SSL 인증서로 커버(Subject Alternative Name 활용).
7. 인증서 자동 갱신
- certbot 컨테이너에 크론잡 또는 스케줄러를 적용, 60일마다 자동 갱신 추천
- 예시(수동 갱신):
$ docker-compose run --rm certbot renew
8. 주의 및 최종 점검
- DNS 설정에서 모든 도메인/서브도메인이 실제 WSL2 Ubuntu의 공인 IP로 연결되어 있어야 함
- ipTIME 공유기 포트포워딩, 방화벽, Windows 방화벽까지 반드시 허용
- 인증서 파일 경로 및 퍼미션 재확인, nginx 재기동
이 방식으로 메인 도메인 및 여러 서브도메인에 SSL을 한 번에 적용할 수 있습니다. 이 구조는 nginx, certbot, 도커, 서브도메인 모두를 쉽게 확장, 관리할 수 있는 장점이 있습니다[1][3][4].
https://velog.io/@rivkode/Docker-Nginx%EC%97%90%EC%84%9C-HTTPS%EB%A5%BC-%EC%9C%84%ED%95%9C-SSL-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%A0%81%EC%9A%A9-Lets-encrypt-Docker-compose,https://directori.tistory.com/136,https://olrlobt.tistory.com/82,https://tech.geusan.com/logs/6/,https://docs.redhat.com/ko/documentation/openshiftcontainerplatform/3.11/html/daytwooperations_guide/day-two-guide-managing-docker-certs