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

root 지시문

원문 보기 위키 갱신

root 지시문 (사이트 루트 지정)

root 지시문은 사이트의 루트 경로를 설정해요. 파일 시스템에 접근하는 여러 matcher와 지시문이 이 경로를 사용해요. 설정하지 않으면 기본 사이트 루트는 현재 작업 디렉터리예요.

출처: Caddy 공식 문서

본문

파일 시스템에 접근하는 다양한 matcher와 지시문이 사용하는 사이트 루트 경로를 설정해요. 설정하지 않으면 기본 사이트 루트는 현재 작업 디렉터리예요.

구체적으로, 이 지시문은 {http.vars.root} placeholder를 설정해요. 같은 블록 안의 다른 root 지시문과 상호 배타적이라서, matcher가 겹치는 여러 root를 정의해도 안전해요. 서로 연쇄적으로 덮어쓰지 않아요.

이 지시문은 정적 파일 서빙을 자동으로 켜지 않아서, 보통 file_server 지시문이나 php_fastcgi 지시문과 함께 사용해요.

문법 (Syntax)

root [<matcher>] <path>
  • ****는 사이트 루트로 사용할 경로예요.

v2.8.0 이전에는 <path> 인자가 /로 시작하면 파서가 matcher 토큰으로 혼동할 수 있어서 와일드카드 matcher 토큰(*)을 지정해야 했어요.

예시 (Examples)

사이트 루트를 /home/bob/public_html로 설정해요(Caddy가 bob 사용자로 실행 중이라고 가정):

Caddy를 systemd 서비스로 실행 중이라면 /home에서 파일을 읽는 것은 동작하지 않아요. caddy 사용자에게 /home 디렉터리에 대한 "실행(executable)" 권한이 없기 때문이에요(트래버설에 필요). 파일은 /srv나 /var/www/html에 두는 걸 권장해요.

root /home/bob/public_html

v2.8.0 이전에는 첫 인자가 경로 matcher와 모호하기 때문에 와일드카드 matcher가 필요했어요. 즉 root * /srv처럼요. 이제는 root /srv로 단순화할 수 있어요.

모든 요청에 대해 사이트 루트를 public_html(현재 작업 디렉터리 기준 상대 경로)로 설정해요:

root public_html

/foo/* 요청에 대해서만 사이트 루트를 바꿔요:

root /foo/* /home/user/public_html/foo

root 지시문은 정적 파일을 서빙하기 위해 file_server와, PHP 사이트를 서빙하기 위해 php_fastcgi와 함께 주로 쓰여요:

example.com {
	root /srv
	file_server
}

더 알아보기 (Learn more)