モジュール ngx_mail_core_module

設定例
ディレクティブ
     listen
     mail
     max_errors
     protocol
     resolver
     resolver_timeout
     server
     server_name
     timeout

このモジュールはデフォルトではビルドされません。--with-mail 設定パラメータで有効にする必要があります。

設定例

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

mail {
    server_name       mail.example.com;
    auth_http         localhost:9000/cgi-bin/nginxauth.cgi;

    imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;

    pop3_auth         plain apop cram-md5;
    pop3_capabilities LAST TOP USER PIPELINING UIDL;

    smtp_auth         login plain cram-md5;
    smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
    xclient           off;

    server {
        listen   25;
        protocol smtp;
    }
    server {
        listen   110;
        protocol pop3;
        proxy_pass_error_message on;
    }
    server {
        listen   143;
        protocol imap;
    }
    server {
        listen   587;
        protocol smtp;
    }
}

ディレクティブ

構文 listen address:port [ssl] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
デフォルト
コンテキスト server

サーバーがリクエストを受け付けるソケットの addressport を設定します。ポートだけを指定することも可能です。アドレスは、例えばホスト名にすることもできます。

listen 127.0.0.1:110;
listen *:110;
listen 110;     # same as *:110
listen localhost:110;

IPv6 アドレス (0.7.58) は角括弧で指定されます。

listen [::1]:110;
listen [::]:110;

UNIX ドメインソケット (1.3.5) は "unix:" 接頭辞で指定されます。

listen unix:/var/run/nginx.sock;

異なるサーバーは、異なる address:port の組み合わせでリッスンする必要があります。

ssl パラメータは、このポートで受け入れられるすべての接続が SSL モードで動作することを指定できます。

proxy_protocol パラメータ (1.19.8) は、このポートで受け入れられるすべての接続が PROXY プロトコルを使用する必要があることを指定できます。取得した情報は、認証サーバーに渡され、クライアントアドレスの変更に使用できます。

listen ディレクティブには、ソケット関連のシステムコールに固有の追加パラメータをいくつか含めることができます。

backlog=number
保留中の接続のキューの最大長を制限する listen() 呼び出しで backlog パラメータを設定します (1.9.2)。デフォルトでは、backlog は FreeBSD、DragonFly BSD、および macOS では -1 に設定され、他のプラットフォームでは 511 に設定されます。
rcvbuf=size
リスニングソケットの受信バッファサイズ (SO_RCVBUF オプション) を設定します (1.11.13)。
sndbuf=size
リスニングソケットの送信バッファサイズ (SO_SNDBUF オプション) を設定します (1.11.13)。
bind
このパラメータは、特定のアドレス:ポートの組み合わせに対して個別の bind() 呼び出しを行うように指示します。事実として、同じポートだが異なるアドレスを持つ複数の listen ディレクティブがあり、いずれかの listen ディレクティブが指定されたポートのすべてのアドレス (*:port) でリッスンする場合、nginx は *:port に対してのみ bind() を行います。この場合、接続を受け入れたアドレスを決定するために getsockname() システムコールが行われることに注意してください。 backlogrcvbufsndbufipv6only、または so_keepalive パラメータが使用されている場合、特定のアドレス:port の組み合わせに対して常に個別の bind() 呼び出しが行われます。
ipv6only=on|off
このパラメータは、ワイルドカードアドレス [::] でリッスンする IPv6 ソケットが IPv6 接続のみを受け入れるか、IPv6 と IPv4 の両方の接続を受け入れるかを (IPV6_V6ONLY ソケットオプションを介して) 決定します。このパラメータは、デフォルトではオンになっています。開始時に一度だけ設定できます。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
このパラメータは、リスニングソケットの "TCP keepalive" の動作を構成します。このパラメータが省略された場合、ソケットにはオペレーティングシステムの 設定が有効になります。値 "on" に設定されている場合、SO_KEEPALIVE オプションがソケットに対して有効になります。値 "off" に設定されている場合、SO_KEEPALIVE オプションはソケットに対して無効になります。一部のオペレーティングシステムでは、TCP_KEEPIDLETCP_KEEPINTVL、および TCP_KEEPCNT ソケットオプションを使用して、ソケットごとに TCP keepalive パラメータを設定することをサポートしています。そのようなシステム (現在、Linux 2.4+、NetBSD 5+、および FreeBSD 9.0-STABLE) では、keepidlekeepintvl、および keepcnt パラメータを使用して設定できます。1 つまたは 2 つのパラメータが省略される場合があり、その場合、対応するソケットオプションのシステムデフォルト設定が有効になります。例えば、
so_keepalive=30m::10
アイドルタイムアウト (TCP_KEEPIDLE) を 30 分に設定し、プローブ間隔 (TCP_KEEPINTVL) をシステムデフォルトのままにし、プローブカウント (TCP_KEEPCNT) を 10 プローブに設定します。

構文 mail { ... }
デフォルト
コンテキスト main

メールサーバーディレクティブが指定されている設定ファイルのコンテキストを提供します。

構文 max_errors number;
デフォルト
max_errors 5;
コンテキスト mail, server

このディレクティブはバージョン 1.21.0 で登場しました。

接続が閉じられるまでのプロトコルエラーの数を設定します。

構文 protocol imap | pop3 | smtp;
デフォルト
コンテキスト server

プロキシサーバーのプロトコルを設定します。サポートされているプロトコルは、IMAPPOP3、および SMTP です。

ディレクティブが設定されていない場合、プロトコルは、listen ディレクティブで指定された既知のポートに基づいて自動的に検出できます。

不要なプロトコルは、設定パラメータ --without-mail_imap_module--without-mail_pop3_module、および --without-mail_smtp_module を使用して無効にできます。

構文 resolver address ... [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone];
resolver off;
デフォルト
resolver off;
コンテキスト mail, server

クライアントのホスト名を見つけて 認証サーバーに渡したり、SMTP をプロキシするときに XCLIENT コマンドで渡すために使用されるネームサーバーを設定します。例えば

resolver 127.0.0.1 [::1]:5353;

アドレスは、ドメイン名または IP アドレスとして、オプションのポート (1.3.1, 1.2.2) と共に指定できます。ポートが指定されていない場合、ポート 53 が使用されます。ネームサーバーはラウンドロビン方式でクエリされます。

バージョン 1.1.7 より前は、単一のネームサーバーのみを構成できました。IPv6 アドレスを使用したネームサーバーの指定は、バージョン 1.3.1 および 1.2.2 以降でサポートされています。

デフォルトでは、nginx は解決中に IPv4 および IPv6 アドレスの両方を検索します。 IPv4 または IPv6 アドレスの検索が不要な場合は、ipv4=off (1.23.1) または ipv6=off パラメータを指定できます。

名前を IPv6 アドレスに解決することは、バージョン 1.5.8 以降でサポートされています。

デフォルトでは、nginx は応答の TTL 値を使用して応答をキャッシュします。オプションの valid パラメータを使用すると、それをオーバーライドできます。

resolver 127.0.0.1 [::1]:5353 valid=30s;

バージョン 1.1.9 より前は、キャッシュ時間の調整は不可能であり、nginx は常に 5 分間応答をキャッシュしていました。

DNS スプーフィングを防ぐために、適切に保護された信頼できるローカルネットワークで DNS サーバーを構成することをお勧めします。

オプションの status_zone パラメータ (1.17.1) は、指定された zone での要求と応答の DNS サーバー統計の収集を有効にします。このパラメータは、当社の商用サブスクリプションの一部として利用できます。

特別な値 off は、解決を無効にします。

構文 resolver_timeout time;
デフォルト
resolver_timeout 30s;
コンテキスト mail, server

DNS 操作のタイムアウトを設定します。例えば

resolver_timeout 5s;

構文 server { ... }
デフォルト
コンテキスト mail

サーバーの設定を設定します。

構文 server_name name;
デフォルト
server_name hostname;
コンテキスト mail, server

使用されるサーバー名を設定します。

ディレクティブが指定されていない場合、マシンのホスト名が使用されます。

構文 timeout time;
デフォルト
timeout 60s;
コンテキスト mail, server

バックエンドへのプロキシが開始される前に使用されるタイムアウトを設定します。