본문 바로가기
WIKI 기술 지식 베이스

templates 지시문

원문 보기 위키 갱신

templates 지시문 (응답 본문 템플릿 실행)

templates 지시문은 응답 본문을 템플릿 문서로 실행해요. 간단한 동적 페이지를 만드는 기능적 기본 요소를 제공해요.

출처: Caddy 공식 문서

본문

응답 본문을 템플릿 문서로 실행해요. 템플릿은 간단한 동적 페이지를 만들기 위한 기능적 기본 요소를 제공해요. HTTP 하위 요청, HTML 파일 include, Markdown 렌더링, JSON 파싱, 기본 데이터 구조, 난수, 시간 등을 포함해요.

템플릿은 디스크의 정적 파일이든 프록시된 웹 서비스든 어떤 출처의 응답 본문에서도 실행될 수 있어요. 신뢰하고, 통제하고, 그리고/또는 세니타이즈하는 콘텐츠에 대해서만 템플릿 평가를 활성화하는 것이 현명해요! 잘못된 설정은 보안 침해로 이어질 수 있어요. 예를 들어 프록시된 앱이 사용자가 콘텐츠를 쓰게/게시하게 하고, 그 콘텐츠가 템플릿 액션처럼 보이는 텍스트를 포함하면, 임의의 사용자가 템플릿을 평가해 환경, 로컬 파일, 네트워크에 접근할 수 있게 될 수 있어요. 사용자 생성 콘텐츠에는 템플릿을 활성화하지 마세요(세니타이즈하지 않는 한).

문법 (Syntax)

templates [<matcher>] {
	mime    <types...>
	between <open_delim> <close_delim>
	root    <path>
	extensions {
		<name> {
			...
		}
	}
}
  • mime은 템플릿 미들웨어가 작동할 MIME 타입이에요. 자격 있는 Content-Type이 없는 응답은 템플릿으로 평가되지 않아요.

    기본값: text/html text/plain.

  • between은 템플릿 액션의 여는/닫는 구분자예요. 문서의 나머지와 간섭하면 바꿀 수 있어요.

    기본값: {{ }}.

  • root는 파일 시스템에 접근하는 함수를 사용할 때의 사이트 루트예요.

    root 지시문이 설정한 사이트 루트를 기본으로 하고, 설정되지 않았으면 현재 작업 디렉터리를 기본으로 해요.

  • extensions는 http.handlers.templates.functions.* 네임스페이스의 모듈이 제공하는 커스텀 템플릿 함수를 등록할 수 있게 해줘요.

    블록 안의 각 하위 지시문은 모듈 이름에 해당해요. 이 모듈들은 템플릿 함수 맵에 커스텀 함수를 추가할 수 있으며, 보통 재사용 가능한 컴포넌트를 구현하는 데 사용돼요. 이 기능은 주로 플러그인을 위한 거예요.

    내장 템플릿 함수 문서는 templates 모듈에서 찾을 수 있어요.

예시 (Examples)

템플릿으로 markdown을 서빙하는 사이트의 완전한 예시는 바로 이 웹사이트의 소스를 참고해요! 구체적으로 Caddyfile과 src/docs/index.html을 살펴봐요.

정적 사이트에 템플릿을 활성화해요:

example.com {
	root /srv
	templates
	file_server
}

템플릿을 사용해 간단한 정적 응답을 서빙하려면 Content-Type을 설정해요:

example.com {
	header Content-Type text/plain
	templates
	respond `Current year is: {{now | date "2006"}}`
}

템플릿 확장(플러그인) 사용:

example.com {
	root /srv
	templates {
		extensions {
			# Requires the caddy-hitcounter plugin:
			# https://github.com/mholt/caddy-hitcounter
			hitCounter {
				style bright_green
				pad_digits 6
			}
		}
	}
	file_server
}

더 알아보기 (Learn more)