Caddy Server
Caddy 는 Golang 으로 작성된 웹 서버로, 자동으로 ssl 인증서를 발급 / 갱신하는 기능을 탑재하고 있다.
특징
- Caddyfile 이라는 자체 파일 형식을 사용하여 웹 서버의 동작 정의 (nginx 의 nginx.conf 파일처럼 자체 형식 사용)
- Let’s Encrypt 를 사용하여 자동으로 ssl 인증서를 발급 / 갱신
활용 예시들
준비
- Caddy 설치: 설치 가이드
- VSCode 의 Caddyfile 용 확장 설치 (추천): Caddyfile Syntax
- 현재 접속중인 네트워크의 공인 IP 주소를 본인이 소유한 Domain 의 DNS Record (A/AAAA) 로 등록
- 현재 접속중인 네트워크가 라우터 아래에 구성된 사설망인 경우 DMZ 혹은 포트포워딩 설정
public reverse proxy with ssl certificate
아래의 간단한 reverse proxy 인프라를 구성해 보자. 추가로 rotate 가 되는 access log 도 로그 디렉터리에 남겨보도록 한다.
graph LR;
network(www)-->|https://caddytest.jhyeom.com|web(Caddy Web Server);;
web-->|http://localhost:3000|was(Web Application Server);
style web fill:#5ac7fb
style was fill:#7daa27
Caddyfile
생성. linux 에서 패키지 관리자를 통해 설치한 경우/etc/caddy/Caddyfile
의 파일을 수정해도 된다.
{
email admin01@caddytest.jhyeom.com # 인증서 발급을 위해 적당한 이메일 주소를 넣어준다.
}
caddytest.jhyeom.com {
reverse_proxy http://localhost:3000 {
header_up X-Real-Ip {remote_host}
}
log {
output file /var/log/caddy/caddy_access.log {
roll_size 10
roll_local_time
roll_keep 20
}
}
encode gzip
}
- caddy server 실행
$ caddy run --config Caddyfile
# 혹은, 백그라운드에서 실행
$ caddy start --config Caddyfile
# 혹은, linux systemd
# systemd service 는 직접 생성해 주어야 한다.
# https://github.com/caddyserver/dist/blob/master/init/caddy.service 의 코드를
# /etc/systemd/system/caddy.service 에 추가해 준 후 아래 명령어 실행
$ sudo systemctl start caddy
private reverse proxy with mkcert
아래의 localhost
reverse proxy 인프라를 구성해 보자. 개발 중 간혹 브라우저에서 https 를 요구하는 경우 mkcert 로 발행한 커스텀 CA 인증서로 localhost 도메인용 ssl certificate 를 발급받아 요긴하게 쓸 수 있다.
graph LR;
localhost(localhost)-->|https://localhost:4000|web(Caddy Web Server);;
web-->|http://localhost:3000|was(Web Application Server);
style web fill:#5ac7fb
style was fill:#7daa27
- mkcert 로 CA Certificate 를 로컬 머신에 설치 & localhost 도메인용 인증서 발급
$ mkcert -install
$ mkcert localhost
Caddyfile
생성
localhost:4000 {
# mkcert 로 발행한 인증서 설정
tls {$PWD}/localhost.pem {$PWD}/localhost-key.pem
reverse_proxy http://localhost:3000
encode gzip
log {
output stdout # log 는 stdout 에 찍는다
}
}
- caddy server 실행
$ caddy run --config Caddyfile
# 혹은, 백그라운드에서 실행
$ caddy start --config Caddyfile
SPA page file server
빌드한 SPA 페이지를 로컬에서 https 를 붙여 테스트해야 하는 경우 로컬에서 아래의 Caddyfile
을 사용. Static file 을 제공하는 CDN 처럼 동작한다.
localhost:4000 {
# mkcert 로 발행한 인증서 설정
tls {$PWD}/localhost.pem {$PWD}/localhost-key.pem
root * {$PWD}/build
try_files {path} /index.html
file_server
encode gzip
log {
output stdout # log 는 stdout 에 찍는다
}
}
유용한 링크
- Caddyfile Directives
- Wildcard Certificate 를 위한 Route53 module
- Route53 모듈은 아직 비공식 모듈로, 이 기능을 사용하려면 위 모듈을 포함해 caddy binary 를 새로 빌드해야한다.