forward_auth
Управляющая директива, которая проксирует клон запроса в шлюз аутентификации, который может решить, нужно ли продолжать обработку или отправить запрос на страницу входа.
Caddy's reverse_proxy способен выполнять «предварительные запросы проверки» к внешней службе, но эта директива нацелена конкретно на сценарии аутентификации. Эта директива фактически является удобным способом использования более длинной и распространённой конфигурации (ниже).
Данная директива делает запрос GET к настроенному upstream с переписанным uri:
- Если upstream отвечает с кодом состояния
2xx, то доступ разрешен, поля заголовков вcopy_headersкопируются в исходный запрос, и обработка продолжается. - В противном случае, если upstream отвечает с любым другим кодом состояния, ответ upstream копируется обратно клиенту. Этот ответ обычно включает переадресацию на страницу входа шлюза аутентификации.
Если это поведение не соответствует вашим потребностям, вы можете использовать расширенную форму ниже в качестве основы и настроить её под свои нужды.
Все поддирективы reverse_proxy поддерживаются и передаются обработчику reverse_proxy.
Синтаксис
forward_auth [<matcher>] [<upstreams...>] {
uri <to>
copy_headers <fields...> {
<fields...>
}
}
-
<upstreams...> — список upstream (бекендов), в который отправляются запросы аутентификации.
-
uri — URI (путь и запрос) для установки в запросе, отправленном upstream. Обычно это конечная точка проверки шлюза аутентификации.
-
copy_headers — список полей HTTP-заголовков для копирования из ответа в исходный запрос, когда запрос имеет код состояния успеха.
Поле может быть переименовано с помощью
>, после чего следует новое имя, напримерBefore>After.Для удобства чтения может быть использован блок, в котором каждое поле перечисляется в отдельной строке.
Поскольку эта директива представляет собой управляющий обертки над обратным прокси, вы можете использовать любые поддирективы reverse_proxy для его настройки.
Расширенная форма
Директива forward_auth эквивалентна следующей конфигурации. Шлюзы аутентификации, такие как Authelia, хорошо работают с этой предопределённой конфигурацией. Если ваша система не поддерживает её, вы можете использовать её в качестве основы и настроить под свои нужды, вместо использования сокращённой записи forward_auth.
reverse_proxy <upstreams...> { # Always GET, so that the incoming
# request's body is not consumed
method GET # Change the URI to the auth gateway's
# verification endpoint
rewrite <to> # Forward the original method and URI,
# since they get rewritten above; this
# is in addition to other X-Forwarded-*
# headers already set by reverse_proxy
header_up X-Forwarded-Method {method}
header_up X-Forwarded-Uri {uri} # On a successful response, copy response headers
@good status 2xx
handle_response @good { # for example, for each copy_headers field...
request_header Remote-User {rp.header.Remote-User}
request_header Remote-Email {rp.header.Remote-Email}
}
}
Примеры
Authelia
Делегирование аутентификации Authelia, прежде чем предоставлять доступ к вашему приложению через обратный прокси:
# Serve the authentication gateway itself
auth.example.com {
reverse_proxy authelia:9091
}# Serve your app
app1.example.com {
forward_auth authelia:9091 {
uri /api/authz/forward-auth
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
}
reverse_proxy app1:8080
}
Дополнительную информацию см. в документации Authelia по интеграции с Caddy.
Tailscale
Делегирование аутентификации Tailscale (в настоящее время называется nginx-auth, но он всё ещё работает с Caddy), и использование альтернативного синтаксиса для copy_headers для переименования копируемых заголовков (обратите внимание на > в каждом заголовке):
forward_auth unix//run/tailscale.nginx-auth.sock {
uri /auth
header_up Remote-Addr {remote_host}
header_up Remote-Port {remote_port}
header_up Original-URI {uri}
copy_headers {
Tailscale-User>X-Webauth-User
Tailscale-Name>X-Webauth-Name
Tailscale-Login>X-Webauth-Login
Tailscale-Tailnet>X-Webauth-Tailnet
Tailscale-Profile-Picture>X-Webauth-Profile-Picture
}
}
© 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/forward_auth