--- title: caddy — 자동 HTTPS 웹 서버 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 설정 한 줄로 자동 HTTPS(Let's Encrypt) 인증서를 발급·갱신합니다. nginx 대비 설정이 단순합니다. tags: 프로그램, 웹 서버 운영, caddy --- **💬 "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을 작성하고 설정을 검증한 결과입니다. ![caddy 명령어 실행 결과](https://games.cursorai.co.kr/assets/caddy-demo.png) 실제 운영 중인 서버 ## 실무에서는 이렇게 씁니다 ### 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가 동작하는 것을 확인한 결과입니다. ![caddy 명령어 실행 결과 2](https://games.cursorai.co.kr/assets/caddy-demo2.png) 실제 운영 중인 서버 ## 주의할 점 - Caddyfile의 site address에 포트를 명시하지 않으면 80/443을 기본으로 씁니다. 포트 충돌에 주의합니다. - 자동 HTTPS는 도메인이 실제로 Caddy 서버를 가리켜야 동작합니다. DNS 미설정 시 인증서 발급이 실패합니다. - nginx에서 Caddy로 전환 시 nginx 전용 모듈(예: Lua)은 대체 구현이 없을 수 있습니다. --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/webserver/caddy.html