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

設定伺服器將接受請求的 socket 的 addressport。可以只指定 port。address 也可以是主機名稱,例如

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 網域 socket (1.3.5) 以 “unix:” 前綴指定

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

不同的伺服器必須監聽不同的 address:port 組。

ssl 參數允許指定在此 port 上接受的所有連線都應以 SSL 模式運作。

proxy_protocol 參數 (1.19.8) 允許指定在此 port 上接受的所有連線都應使用 PROXY 協定。取得的資訊會傳遞至驗證伺服器,並可用於變更用戶端位址

listen 指令可以有多個特定於 socket 相關系統呼叫的額外參數。

backlog=number
listen() 呼叫中設定 backlog 參數,該參數限制待處理連線佇列的最大長度 (1.9.2)。預設情況下,backlog 在 FreeBSD、DragonFly BSD 和 macOS 上設定為 -1,在其他平台上則設定為 511。
rcvbuf=size
設定監聽 socket 的接收緩衝區大小 (SO_RCVBUF 選項) (1.11.13)。
sndbuf=size
設定監聽 socket 的傳送緩衝區大小 (SO_SNDBUF 選項) (1.11.13)。
bind
此參數指示針對給定的 address:port 組進行單獨的 bind() 呼叫。事實是,如果有數個 listen 指令具有相同的 port 但不同的 address,並且其中一個 listen 指令監聽給定 port 的所有 address (*:port),nginx 將只 bind()*:port。應該注意的是,在這種情況下,將進行 getsockname() 系統呼叫以確定接受連線的 address。如果使用 backlogrcvbufsndbufipv6onlyso_keepalive 參數,則對於給定的 address:port 組,將始終進行單獨的 bind() 呼叫。
ipv6only=on|off
此參數 (透過 IPV6_V6ONLY socket 選項) 決定監聽萬用字元 address [::] 的 IPv6 socket 將只接受 IPv6 連線還是同時接受 IPv6 和 IPv4 連線。預設情況下,此參數為開啟狀態。它只能在啟動時設定一次。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
此參數設定監聽 socket 的「TCP keepalive」行為。如果省略此參數,則作業系統的設定將對 socket 生效。如果將其設定為值 “on”,則會開啟 socket 的 SO_KEEPALIVE 選項。如果將其設定為值 “off”,則會關閉 socket 的 SO_KEEPALIVE 選項。某些作業系統支援使用 TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT socket 選項,針對每個 socket 設定 TCP keepalive 參數。在這些系統 (目前為 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE) 上,可以使用 keepidlekeepintvlkeepcnt 參數進行配置。可以省略一個或兩個參數,在這種情況下,系統預設設定將對應的 socket 選項生效。例如,
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

設定代理伺服器的協定。支援的協定有 IMAPPOP3SMTP

如果未設定指令,則可以根據 listen 指令中指定的已知 port 自動偵測協定

可以使用 配置參數 --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;

address 可以指定為主機名稱或 IP 位址,以及可選的 port (1.3.1、1.2.2)。如果未指定 port,則使用 port 53。名稱伺服器以循環配置方式查詢。

在 1.1.7 版之前,只能配置單一名稱伺服器。從 1.3.1 版和 1.2.2 版開始,支援使用 IPv6 位址指定名稱伺服器。

預設情況下,nginx 在解析時會同時尋找 IPv4 和 IPv6 位址。如果不希望尋找 IPv4 或 IPv6 位址,則可以指定 ipv4=off (1.23.1) 或 ipv6=off 參數。

從 1.5.8 版開始,支援將名稱解析為 IPv6 位址。

預設情況下,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

設定在開始代理到後端之前使用的逾時時間。