nginx: auth_http (IMAP プロキシ) の目的を理解する

nginx: auth_http (IMAP プロキシ) の目的を理解する

IMAPクライアントのリクエストをnginxプロキシ経由でIMAPバックエンドに送信したいのですが、メール認証httpauth_httpモジュールでは、クライアントを認証するためにディレクティブを使用する必要があります。しかし、の目的は正確には何でありauth_http、なぜ認証プロセスを IMAP バックエンドに転送できないのでしょうか?

私の知る限りでは、auth_httpどのバックエンドが使用されるかなどを決定するためにカスタム HTTP プロトコルを使用する認証スクリプトを指しており、実際の IMAP ベースの認証は完全にスキップされます。正しいでしょうか?

誰かが実用的な例を投稿していただければ幸いです。

答え1

auth_http主に 2 つのことを行います。

  • ユーザーを認証します (認証失敗時にユーザーを効果的に遅延させるさまざまなオプションを含む)。
  • また、どのバックエンドを使用するか (およびバックエンド認証で使用するユーザー名とパスワード) を決定します。

場合によっては認証をバックエンドで直接処理できることもありますが、常に可能であるとは限りません。さらに、nginx をメール プロキシとして使用する必要がある場合、ほとんどの場合、複数のバックエンドが存在し、バックエンドが事前にわかっていないことを意味します。

メール サーバーはプロセスごとの接続モデルを使用する傾向があり、エラーを返す前にしばらく待つことができないため、nginx を使用して認証 (特に認証エラー) を処理する方が効率的です。

上記のすべてを気にせず、nginx が事前に決定されたバックエンドに接続を渡すだけであれば、非常にシンプルな auth_http スクリプトとして、nginx 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 では使用できません。

関連情報