模块 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 |
设置服务器接受请求的套接字的 address 和 port。也可以只指定端口。地址也可以是主机名,例如
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)。默认情况下,在 FreeBSD、DragonFly BSD 和 macOS 上,backlog设置为 -1,在其他平台设置为 511。 -
rcvbuf=size - 设置监听套接字的接收缓冲区大小(
SO_RCVBUF选项)(1.11.13)。 -
sndbuf=size - 设置监听套接字的发送缓冲区大小(
SO_SNDBUF选项)(1.11.13)。 -
bind - 此参数指示为给定的 address:port 对进行单独的
bind()调用。事实是,如果有多个listen指令使用相同的端口但地址不同,并且其中一个listen指令监听给定端口的所有地址 (*:port),则 nginx 将只绑定到*:port。应该注意的是,在这种情况下将调用getsockname()系统调用来确定接受连接的地址。如果使用了backlog、rcvbuf、sndbuf、ipv6only或so_keepalive参数,则对于给定的address:port对,将始终进行单独的bind()调用。 -
ipv6only=on|off - 此参数(通过
IPV6_V6ONLY套接字选项)确定监听通配符地址[::]的 IPv6 套接字是仅接受 IPv6 连接还是同时接受 IPv6 和 IPv4 连接。此参数默认开启。它只能在启动时设置一次。 -
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt] - 此参数配置监听套接字的“TCP keepalive”行为。如果省略此参数,则套接字将使用操作系统的设置。如果设置为“
on”,则套接字将开启SO_KEEPALIVE选项。如果设置为“off”,则套接字将关闭SO_KEEPALIVE选项。一些操作系统支持使用TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT套接字选项按每个套接字设置 TCP keepalive 参数。在这些系统(当前包括 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE)上,可以使用keepidle、keepintvl和keepcnt参数进行配置。可以省略一个或两个参数,在这种情况下,将使用相应套接字选项的系统默认设置。
例如,so_keepalive=30m::10
| 语法 |
mail { ... } |
|---|---|
| 默认值 | — |
| 上下文 |
将空闲超时 ( |
main
| 语法 |
max_errors |
|---|---|
| 默认值 |
max_errors 5; |
| 上下文 |
mail, server |
此指令出现在 1.21.0 版本中。
设置连接关闭前的协议错误数量。
| 语法 |
protocol |
|---|---|
| 默认值 | — |
| 上下文 |
server |
设置代理服务器的协议。支持的协议包括 IMAP、POP3 和 SMTP。
如果未设置此指令,可以根据 listen 指令中指定的周知端口自动检测协议
-
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;
地址可以指定为域名或 IP 地址,带可选端口 (1.3.1, 1.2.2)。如果未指定端口,则使用端口 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 认证期间的 salt 中;
- 在连接到 SMTP 后端时的
EHLO命令中,如果启用了 XCLIENT 命令的传递。
如果未指定此指令,则使用机器的主机名。
| 语法 |
timeout |
|---|---|
| 默认值 |
timeout 60s; |
| 上下文 |
mail, server |
设置在开始代理到后端之前的超时时间。