Я хотел бы отправлять запросы клиента IMAP на бэкэнд IMAP через прокси nginx. Согласноmail_auth_httpmodule, директива auth_http
должна использоваться для аутентификации клиентов. Но какова именно цель auth_http
, почему процесс аутентификации не может быть просто перенаправлен на бэкэнд IMAP?
Насколько мне известно, auth_http
указывает на скрипт аутентификации, который использует пользовательский протокол HTTP для определения того, какой бэкэнд будет использоваться и т. д., а фактическая аутентификация на основе IMAP полностью пропускается. Я прав?
Буду признателен, если кто-нибудь опубликует практический пример.
решение1
Он auth_http
выполняет две основные функции:
- Он аутентифицирует пользователей (включая различные варианты для эффективной задержки пользователей в случае неудачной аутентификации).
- И он определяет, какой бэкэнд использовать (и какое имя пользователя и пароль использовать при аутентификации на бэкэнде, если использовать вообще).
Хотя в некоторых случаях аутентификация может быть выполнена непосредственно бэкендом, это не всегда возможно. Более того, если nginx нужно использовать как почтовый прокси, это почти всегда означает, что есть несколько бэкендов, и бэкенд заранее неизвестен.
Кроме того, с помощью nginx эффективнее обрабатывать аутентификацию (в частности, ошибки аутентификации), поскольку почтовые серверы, как правило, используют модель «процесс на соединение» и не могут эффективно ждать некоторое время, прежде чем вернуть ошибку.
Если вас не волнует все вышеперечисленное и вы хотите, чтобы nginx просто передавал соединение на заранее определенный бэкэнд, вы можете использовать что-то вроде этого в блоке http{} nginx в качестве простейшего скрипта auth_http:
location = /auth {
add_header Auth-Status OK;
add_header Auth-Server 127.0.0.2; # backend ip
add_header Auth-Port 143; # backend port
return 204;
}
При использовании такого скрипта аутентификации nginx всегда будет получать успешный результат аутентификации и передавать соединение на указанный бэкэнд с указанными клиентом именем пользователя и паролем.
Обратите внимание, что это должнонетиспользоваться с SMTP, поскольку в SMTP нет внутренней аутентификации.