caddy — 자동 HTTPS 웹 서버
Linux / 웹 서버 운영 / caddy.html
💬 "caddy 명령어"
caddy는 자동 HTTPS 웹 서버 설정 한 줄로 자동 HTTPS(Let's Encrypt) 인증서를 발급·갱신합니다. nginx 대비 설정이 단순합니다.
도메인 한 줄로 자동 HTTPS 인증서 발급·갱신을 지원합니다. JSON·Caddyfile 두 가지 설정 형식을 씁니다.
- 개념: 도메인 한 줄로 자동 HTTPS 인증서 발급·갱신을 지원합니다.
- 주요 기능: JSON·Caddyfile 두 가지 설정 형식을 씁니다.
- 장점: HTTP/3(QUIC)을 기본 지원합니다.
- 활용: 정적 파일·리버스 프록시·FastCGI를 내장합니다.
설치 및 다운로드
caddy는 패키지 매니저 또는 공식 스크립트로 설치합니다.
| 환경 | 명령 |
|---|---|
| Ubuntu / Debian | sudo apt install caddy |
| 공식 스크립트 | curl https://caddyserver.com/api/download?os=linux |
| macOS (brew) | brew install caddy |
| Docker | docker run -p 80:80 -p 443:443 caddy |
| 확인 | caddy version |
설치 확인은 caddy --version으로 합니다.
자주 쓰는 옵션
| 옵션 | 설명 |
|---|---|
caddy run | 포그라운드 실행 |
caddy start | 백그라운드 실행 |
caddy reload | 설정 재로드 (무중단) |
caddy validate | 설정 문법 검증 |
sudo systemctl reload caddy | 서비스 재로드 |
필수 명령어 조합 3가지
caddy run— Caddyfile 로드 후 포그라운드 실행caddy validate --config /etc/caddy/Caddyfile— 설정 검증sudo systemctl reload caddy— 무중단 재로드
💬 "실제 서버에서 caddy를 사용하는 예시를 보여줘"
실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.
1단계 · 설치 확인
설치 여부를 확인합니다.
caddy version || sudo apt install -y caddy
2단계 · 설정 작성
Caddyfile을 작성합니다.
echo 'example.com {\n root * /var/www/html\n file_server\n}' > /etc/caddy/Caddyfile
3단계 · 시작
Caddy를 시작하고 확인합니다.
sudo systemctl restart caddy && curl -sI https://example.com/
실제 실행 화면
Caddyfile을 작성하고 설정을 검증한 결과입니다.

실제 운영 중인 서버
실무에서는 이렇게 씁니다
1. nginx→Caddy 이관
상황 — nginx 443 블록을 Caddyfile로 이관합니다.
echo 'example.com {\n root * /var/www/html\n file_server\n encode gzip\n}' > /etc/caddy/Caddyfile
결과 — Caddyfile 하나로 설정이 완료됩니다.
포인트 — certbot cron도 별도 설정도 필요 없습니다.
2. 자동 HTTPS 확인
상황 — 자동 인증서 발급을 확인합니다.
sudo systemctl restart caddy && sleep 5 && curl -sI https://example.com/
결과 — HTTP/2 200과 server: Caddy가 보입니다.
포인트 — 브라우저에서 자동 HTTPS가 동작합니다.
실제 실행 화면
Caddy 시작 후 자동 HTTPS가 동작하는 것을 확인한 결과입니다.

실제 운영 중인 서버
주의할 점
- Caddyfile의 site address에 포트를 명시하지 않으면 80/443을 기본으로 씁니다. 포트 충돌에 주의합니다.
- 자동 HTTPS는 도메인이 실제로 Caddy 서버를 가리켜야 동작합니다. DNS 미설정 시 인증서 발급이 실패합니다.
- nginx에서 Caddy로 전환 시 nginx 전용 모듈(예: Lua)은 대체 구현이 없을 수 있습니다.