Перехват
Обобщенная абстракция функции перехвата ответов из директивы перехвата ответов от reverse_proxy директивы. Это можно использовать с любым обработчиком, который генерирует ответы, включая те, что получены от плагинов, таких как FrankenPHP's php_server.
Эта директива позволяет вам сопоставлять ответы, и будет вызван первый соответствующий handle_response маршрут или replace_status. При вызове исходное тело ответа сохраняется, что даёт возможность этому маршруту написать другое тело ответа, с новым кодом состояния или с необходимыми изменениями заголовков ответа. Если маршрут не напишет новое тело ответа, то вместо него будет записано исходное тело ответа.
Синтаксис
intercept [<matcher>] {
@name {
status <code...>
header <field> [<value>]
}
replace_status [<matcher>] <code>
handle_response [<matcher>] {
<directives...>
}
}
-
@name — имя сопоставителя ответов. Пока каждый сопоставитель ответов имеет уникальное имя, можно определить несколько сопоставителей. Ответ можно сопоставить по коду состояния и наличию или значению заголовка ответа.
-
replace_status просто изменяет код состояния ответа при совпадении с заданным сопоставителем.
-
handle_response определяет маршрут для выполнения при совпадении с заданным сопоставителем (или, если сопоставитель опущен, для всех ответов). Будет применена первая соответствующая секция. Внутри блока
handle_responseможно использовать любые другие директивы.
Внутри handle_response маршрутах доступны следующие плейсхолдеры для извлечения информации из исходного ответа:
-
{resp.status_code}Код состояния исходного ответа. -
{resp.header.*}Заголовки из исходного ответа.
Примеры
При использовании FrankenPHP's 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
}
© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/caddyfile/directives/intercept