nginx: понимание назначения auth_http (IMAP-прокси)

nginx: понимание назначения auth_http (IMAP-прокси)

Я хотел бы отправлять запросы клиента 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 нет внутренней аутентификации.

Связанный контент