web-dev-qa-db-ja.com

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

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

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

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

4
watain

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

  • ユーザーを認証します(失敗した認証でユーザーを効果的に遅らせるためのさまざまなオプションを含みます)。
  • そして、使用するバックエンド(および、もしあれば、バックエンド認証で使用するユーザー名とパスワード)を決定します。

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

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

上記のすべてを気にせず、nginxが事前に定義されたバックエンドに接続を渡すだけにしたい場合は、nginx http {}ブロックで次のようなものを単純な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ではnotを使用する必要があります。

9
Maxim Dounin