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
}