обработка_ошибок
Настраивает обработчики ошибок.
Когда стандартные обработчики HTTP-запросов возвращают ошибку, обычная обработка останавливается, и вызываются обработчики ошибок. Обработчики ошибок образуют маршрут, который аналогичен обычным маршрутам, и они могут выполнять любые действия, которые могут выполнять обычные маршруты. Это обеспечивает большой контроль и гибкость при обработке ошибок во время HTTP-запросов. Например, вы можете обслуживать статические страницы ошибок, страницы ошибок с шаблонами или выполнять обратный прокси к другому бэкенду для обработки ошибок.
Директива может быть повторена с различными кодами состояния, чтобы обрабатывать разные ошибки по-разному. Если коды состояния не указаны, она будет соответствовать любой ошибке, выполняя роль резервного варианта, если другие обработчики ошибок не подходят.
Контекст запроса передаётся в маршруты ошибок, поэтому любые значения, заданные в контексте запроса, такие как корень сайта или переменные, также сохранятся в обработчиках ошибок. Кроме того, при обработке ошибок доступны новые подстановки.
Обратите внимание, что некоторые директивы, например, reverse_proxy, которые могут записать ответ с кодом HTTP-состояния, классифицируемым как ошибка, не будут активировать маршруты ошибок.
Вы можете использовать директиву error для явного запуска ошибки на основе ваших собственных решений маршрутизации.
Синтаксис
handle_errors [<status_codes...>] {
<directives...>
}
-
<status_codes...> — один или несколько кодов состояния HTTP для сопоставления с обрабатываемой ошибкой. Коды состояния могут быть трёхзначными числами или специальным случаем
4xxили5xx, которые соответствуют всем кодам состояния в диапазоне 400-499 или 500-599 соответственно. Если коды состояния не указаны, она будет соответствовать любой ошибке, выполняя роль резервного варианта, если другие обработчики ошибок не подходят. -
<directives...> — список HTTP-обработчиков директивы и сопоставители, по одному на строке.
Подстановки
При обработке ошибок доступны следующие подстановки. Они являются аббревиатурами Caddyfile для полных подстановок, которые можно найти в документации JSON для маршрутов ошибок HTTP-сервера.
| Подстановка | Описание |
|---|---|
{err.status_code} | Рекомендуемый код состояния HTTP |
{err.status_text} | Текст состояния, связанный с рекомендуемым кодом состояния |
{err.message} | Сообщение об ошибке |
{err.trace} | Источник ошибки |
{err.id} | Идентификатор данного случая ошибки |
Примеры
Настраиваемые страницы ошибок, основанные на коде состояния (например, страница с именем 404.html для ошибок 404). Обратите внимание, что file_server сохраняет код состояния HTTP ошибки при запуске в handle_errors (предполагается, что вы предварительно задали корень сайта):
handle_errors {
rewrite * /{err.status_code}.html
file_server
}
Единственная страница ошибок, которая использует templates для записи настраиваемого сообщения об ошибке:
handle_errors {
rewrite * /error.html
templates
file_server
}
Если вы хотите предоставить настраиваемые страницы ошибок только для некоторых кодов ошибок, вы можете предварительно проверить наличие файлов с настраиваемыми ошибками с помощью file сопоставителя:
handle_errors {
@custom_err file /err-{err.status_code}.html /err.html
handle @custom_err {
rewrite * {file_match.relative}
file_server
}
respond "{err.status_code}{err.status_text}"
}
Обратный прокси к профессиональному серверу, высококвалифицированному для обработки HTTP-ошибок и улучшения вашего дня 😸:
handle_errors {
rewrite * /{err.status_code}
reverse_proxy https://http.cat {
header_up Host {upstream_hostport}
replace_status {err.status_code}
}
}
Просто используйте respond для возвращения кода и названия ошибки
handle_errors {
respond "{err.status_code}{err.status_text}"
}
Для обработки разных кодов ошибок по-разному:
handle_errors 404 410 {
respond "It's a 404 or 410 error!"
}
handle_errors 5xx {
respond "It's a 5xx error."
}
handle_errors {
respond "It's another error"
}
Вышеприведённый пример работает так же, как и нижеприведённый, который использует expression сопоставитель для кодов состояния и handle для взаимной исключительности:
handle_errors {
@404-410 `{err.status_code} in [404, 410]`
handle @404-410 {
respond "It's a 404 or 410 error!"
}
@5xx `{err.status_code} >= 500 && {err.status_code} < 600`
handle @5xx {
respond "It's a 5xx error."
}
handle {
respond "It's another error"
}
}
© 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/handle_errors