ngx_mail_core_module 模組
範例配置 指令 listen 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 |
---|---|
預設 | — |
上下文 |
server |
設定伺服器將接受請求的 socket 的 address
和 port
。可以只指定 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。如果使用backlog
、rcvbuf
、sndbuf
、ipv6only
或so_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_KEEPIDLE
、TCP_KEEPINTVL
和TCP_KEEPCNT
socket 選項,針對每個 socket 設定 TCP keepalive 參數。在這些系統 (目前為 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE) 上,可以使用keepidle
、keepintvl
和keepcnt
參數進行配置。可以省略一個或兩個參數,在這種情況下,系統預設設定將對應的 socket 選項生效。例如,
會將閒置逾時 (so_keepalive=30m::10
TCP_KEEPIDLE
) 設定為 30 分鐘,將探測間隔 (TCP_KEEPINTVL
) 保留在系統預設值,並將探測計數 (TCP_KEEPCNT
) 設定為 10 個探測。
語法 |
mail { ... } |
---|---|
預設 | — |
上下文 |
main |
提供在其中指定郵件伺服器指令的配置檔上下文。
語法 |
max_errors |
---|---|
預設 |
max_errors 5; |
上下文 |
mail , server |
此指令出現在 1.21.0 版中。
設定在關閉連線之前發生的協定錯誤數量。
語法 |
protocol |
---|---|
預設 | — |
上下文 |
server |
設定代理伺服器的協定。支援的協定有 IMAP、POP3 和 SMTP。
如果未設定指令,則可以根據 listen 指令中指定的已知 port 自動偵測協定
-
imap
: 143, 993 -
pop3
: 110, 995 -
smtp
: 25, 587, 465
可以使用 配置參數 --without-mail_imap_module
、--without-mail_pop3_module
和 --without-mail_smtp_module
停用不必要的協定。
語法 |
resolver resolver |
---|---|
預設 |
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 |
---|---|
預設 |
resolver_timeout 30s; |
上下文 |
mail , server |
設定 DNS 操作的逾時,例如
resolver_timeout 5s;
語法 |
server { ... } |
---|---|
預設 | — |
上下文 |
mail |
設定伺服器的配置。
語法 |
server_name |
---|---|
預設 |
server_name hostname; |
上下文 |
mail , server |
設定使用的伺服器名稱
- 在初始 POP3/SMTP 伺服器歡迎訊息中;
- 在 SASL CRAM-MD5 驗證期間的鹽中;
- 在連線至 SMTP 後端時的
EHLO
命令中 (如果已啟用傳遞 XCLIENT 命令)。
如果未指定指令,則使用電腦的主機名稱。
語法 |
timeout |
---|---|
預設 |
timeout 60s; |
上下文 |
mail , server |
設定在開始代理到後端之前使用的逾時時間。