模块 ngx_mail_core_module

示例配置
指令
     监听
     邮件
     最大错误
     协议
     解析器
     解析器超时
     服务器
     服务器名
     超时

此模块默认不构建,应使用--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 地址:端口 [ssl] [proxy_protocol] [backlog=数字] [rcvbuf=大小] [sndbuf=大小] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
默认:
上下文: server

设置服务器接受请求的套接字的地址端口。也可以仅指定端口。地址也可以是主机名,例如:

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;

不同的服务器必须监听不同的地址:端口 对。

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
此参数指示为给定的地址:端口对进行单独的 bind() 调用。事实上,如果有几个具有相同端口但不同地址的 listen 指令,并且其中一个 listen 指令监听了给定端口的所有地址(*:port),nginx 将仅绑定到 *:port。值得注意的是,在这种情况下,将进行 getsockname() 系统调用以确定接受连接的地址。如果使用了 backlogrcvbufsndbufipv6onlyso_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_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT 套接字选项对每个套接字单独设置 TCP keepalive 参数。在这些系统上(当前为 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),它们可以使用 keepidlekeepintvlkeepcnt 参数进行配置。可以省略一个或两个参数,在这种情况下,将使用相应套接字选项的系统默认设置。例如,
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 指令中指定的知名端口自动检测:

可以使用 --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 之前,只能配置单个名称服务器。从版本 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 主机名;
上下文: mail, server

设置用于以下用途的服务器名称:

如果未指定该指令,则使用机器的主机名。

语法: timeout 时间;
默认值:
timeout 60s;
上下文: mail, server

设置在开始代理到后端之前使用的超时时间。