Spec-Zone.ru › Caddy

обработка_ошибок

Настраивает обработчики ошибок.

Когда стандартные обработчики 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API