[ 아키텍처 ] caddy는 명령어, 핵심 라이브러리, 구성 모듈의 세 가지 주요 구성 요소로 구성됩니다. 이 명령어는 프로그램이 실행되는 확장 가능한 인터페이스로, 구성파일을 로드하고, 공통모드를 실행하고, 설치된 플러그인을 관리하고, 관련 유틸리티 기능을 제공할 수도 있습니다. 핵심 라이브러리에는 구성 로드, 언로드 및 관리를 위한 API가 있지만, 그 자체로는 특별히 유용한 기능이 없습니다. caddy의 대부분의 기능은 caddy의 구성 구조를 확장하는 플러그인 모듈에서 제공되며, 예를 들어 HTTP서버는 모듈입니다. caddy모듈은 다양한 장기 서비서, 웹표준 및 기타 유용한 기능을 구현합니다.
caddy의 입력은 개방형 소켓을 통해 RESTful HTP API를 통해 수신되는 JSON 구성 문서입니다. HTTP클라이언트가 없는 경우 caddy의 명령줄 인터페이스를 사용하여 구성 파일을 로드할 수 있습니다. 구성 어댑터를 사용하여 다른 구성형식을 JSON으로 변환할 수 있습니다. 기존 어댑터에는 커맨드 라인에서 1등급을 지원하는 캐디파일과 YAML, TOML, Nginx 및 기타 여러 형식이 있습니다.
관리 소켓을 통해 구성이 수신되면 caddy는 지정된 모든 모듈에 대한 구성을 디코딩하고 모든 앱 모듈 실행을 시작합니다. 앱 모듈을 프로비저닝 할 때는 직접 사용하는 모듈을 로드하고 프로비저닝 할 수 있습니다. 예를 들어, HTTP서버는 HTTP핸들러 모듈을 사용하여 HTTP요청을 처리하는 앱 모듈이며, 이러한 핸들러는 다른 모듈을 사용하여 기능을 구현할 수도 있습니다. 이러한 모든 모듈은 구성 로드 단계에서 프로비저닝됩니다.
플러그인은 caddy 바이너리에 직접 정적으로 컴파일하여 설치합니다. 플러그인이 없는 caddy의 기본 구성 구조에는 관리 및 기록을 위한 몇가지 기본 옵션만 있습니다. 다른 모든 기능은 앱 모듈에서 제공해야 합니다. 공식 caddy배포판에는 수십개의 표준 모듈이 포함되어 있으며, 다른 배포판은 다음을 사용하여 프로젝트 웹사이트에서 추가할 수 있습니다. xcaddy명령줄도구 또는 사용자 지정 빌드를 수동으로 컴파일하여 사용할 수 있습니다.
[ HTTP서버 ] HTTP서버는 공식 caddy배포판과 함께 표준으로 제공되는 앱 모듈입니다. 주로 정적 파일 서버 및 로드밸런싱 역 프록시로 사용됩니다. caddy의 HTTP기능의 기본은 Go의 표준라이브러리에 있는 구현을 사용하지만, 다양한 향상된 기능과 사용자 지정은 미들웨어로 사용할 수 있으며 구성 매개변수를 통해 노출됩니다.
기본적으로 경로에 빈 호스트 일치자가 없는 경우 TLS가 자동으로 사용됩니다. 이들은 caddy가 서비스 중인 사이트 이름 또는 IP주소로 가정되므로 caddy는 구성된 host이름 및 IP주소에 대한 인증서를 자동으로 조달하고 갱신합니다. 이러한 방식으로 자동 HTTPS가 활성화되면 caddy는 HTTP요청을 해당 HTTPS위치로 redirect 합니다