Caddyfile이란?
Caddy는 자동 HTTPS와 간결한 설정 문법으로 유명한 Go 기반 웹서버입니다. nginx의 복잡한 디렉티브 대신 도메인 한 줄로 시작하는 직관적인 Caddyfile을 사용하며, Let's Encrypt 인증서 발급과 갱신, OCSP 스테이플링, HTTP/3까지 별도 설정 없이 처리해 줍니다. 본 빌더는 도메인 블록을 클릭으로 추가하고 리버스 프록시·정적 파일·헤더·재작성·압축 옵션을 폼으로 입력하면 즉시 Caddyfile을 만들어 줍니다.
주요 디렉티브
reverse_proxy: 업스트림 서버로 요청을 전달합니다. 다중 업스트림과 헬스체크가 가능합니다.file_server: 정적 파일을 서빙합니다.browse를 붙이면 디렉터리 인덱스를 보여줍니다.encode gzip zstd: 응답을 자동 압축합니다.header: 응답 헤더를 추가/삭제합니다. HSTS·CSP 등 보안 헤더에 활용합니다.redir: 301/302 리다이렉트를 설정합니다.rewrite: 내부 경로를 재작성합니다(URL은 그대로).tls: 자체 인증서 또는 이메일 기반 ACME 발급을 명시합니다.
자동 HTTPS 동작 방식
Caddy는 사이트 주소에 도메인이 포함되어 있으면 부팅 직후 자동으로 Let's Encrypt 또는 ZeroSSL ACME 챌린지를 수행해 인증서를 발급합니다. 80/443 포트 모두 열려 있어야 하며, 인증서는 메모리/파일시스템($HOME/.local/share/caddy)에 캐시됩니다. 로컬 IP(localhost, 127.0.0.1)의 경우에는 내부 자체 서명 인증서가 발급됩니다. 자동 HTTPS를 끄려면 글로벌 옵션의 auto_https off를 사용하세요.
리버스 프록시 응용
Caddy의 reverse_proxy는 별다른 모듈 없이 WebSocket 업그레이드, HTTP/2 백엔드, 헬스체크, 로드밸런싱(랜덤·라운드로빈·IP 해시)을 지원합니다. 백엔드 여러 개를 공백으로 나열하면 자동 로드밸런싱되며, lb_policy round_robin으로 정책을 바꿀 수 있습니다. header_up X-Real-IP {remote}로 원본 IP를 전달하는 등 헤더 변형도 한 줄로 가능합니다.
자주 묻는 질문 (FAQ)
Q. 생성된 Caddyfile은 어디에 두나요?
A. 리눅스 패키지로 설치하면 /etc/caddy/Caddyfile이 기본 경로이며, sudo systemctl reload caddy로 무중단 재적용합니다.
Q. nginx 설정에서 Caddy로 옮길 때 주의점은?
A. Caddy는 기본적으로 정적 파일을 자동 서빙하지 않습니다. file_server 디렉티브를 명시해야 합니다. 또한 location 대신 handle·handle_path·route를 사용합니다.
Q. 인증서 발급이 실패하면?
A. DNS가 해당 서버를 가리키는지, 80/443이 외부에서 열려 있는지, 같은 도메인에 ACME 발급 횟수 제한(주 50회)을 초과하지 않았는지 확인하세요. --debug 옵션으로 ACME 로그를 확인할 수 있습니다.