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

intercept

원문 보기 위키 갱신

출처: Caddy 공식 문서

본문

reverse_proxy지시문의 응답 가로채기 기능을 일반화한 추상화예요. 응답을 생성하는 모든 핸들러와 함께 사용할 수 있으며, FrankenPHP의 php_server 같은 플러그인도 포함돼요.

이 지시문으로 응답을 매칭하고, 첫 번째로 일치하는 handle_response 라우트나 replace_status가 호출돼요. 호출되면 원래 응답 본문은 보류되고, 해당 라우트가 새 상태 코드나 필요한 응답 헤더 조작과 함께 다른 응답 본문을 쓸 기회를 얻게 돼요. 라우트가 새 응답 본문을 쓰지 않는다면, 원래 응답 본문이 대신 작성돼요.

문법

intercept [<matcher>] {
	@name {
		status <code...>
		header <field> [<value>]
	}

	replace_status [<response_matcher>] <code>

	handle_response [<response_matcher>] {
		<directives...>
	}
}
  • @name 은 명명된 응답 매처 블록이에요. 각 응답 매처가 고유한 이름을 갖는 한 여러 매처를 정의할 수 있어요. 응답은 상태 코드와 응답 헤더의 존재 여부 또는 값으로 매칭할 수 있어요.

  • replace_status 는 주어진 매처가 일치할 때 응답의 상태 코드를 간단히 변경해요.

  • handle_response 는 원래 응답이 주어진 응답 매처와 일치할 때 실행할 라우트를 정의해요. 매처를 생략하면 모든 응답을 가로채요. handle_response 블록이 여러 개 정의되면 첫 번째로 일치하는 블록이 적용돼요. 블록 안에서는 다른 모든 지시문을 사용할 수 있어요.

handle_response 라우트 안에서는 원래 응답에서 정보를 가져오기 위해 다음 플레이스홀더를 사용할 수 있어요:

  • {resp.status_code} 원래 응답의 상태 코드예요.

  • {resp.header.*} 원래 응답의 헤더예요.

예제

FrankenPHP의 php_server를 사용할 때, intercept로 X-Accel-Redirect 지원을 구현해서 PHP 앱이 요청한 정적 파일을 서빙하는 예시예요:

localhost {
	root /srv

	intercept {
		@accel header X-Accel-Redirect *
		handle_response @accel {
			root /path/to/private/files
			rewrite {resp.header.X-Accel-Redirect}
			method GET
			file_server
		}
	}

	php_server
}

더 알아보기 (Learn more)