模块 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;
    }
}

指令

语法 侦听 地址:端口 [ssl] [代理协议] [积压=数字] [接收缓冲区=大小] [发送缓冲区=大小] [绑定] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
默认值
上下文 服务器

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

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 指令可以具有几个特定于套接字相关系统调用的附加参数。

积压=数字
listen() 调用中设置 积压 参数,该参数限制了待处理连接队列的最大长度(1.9.2)。默认情况下,积压 在 FreeBSD、DragonFly BSD 和 macOS 上设置为 -1,在其他平台上设置为 511。
接收缓冲区=大小
为侦听套接字设置接收缓冲区大小(SO_RCVBUF 选项)(1.11.13)。
发送缓冲区=大小
为侦听套接字设置发送缓冲区大小(SO_SNDBUF 选项)(1.11.13)。
绑定
此参数指示为给定的地址:端口对执行单独的 bind() 调用。事实上,如果有多个 listen 指令具有相同的端口但不同的地址,并且其中一个 listen 指令侦听给定端口的所有地址(*:port),nginx 将仅 bind()*:port。应注意,在这种情况下将执行 getsockname() 系统调用以确定接受连接的地址。如果使用了 backlogrcvbufsndbufipv6onlyso_keepalive 参数,那么对于给定的 address:port 对,将始终执行单独的 bind() 调用。
ipv6only=on|off
此参数确定(通过 IPV6_V6ONLY 套接字选项)侦听通配符地址 [::] 的 IPv6 套接字是否仅接受 IPv6 连接或同时接受 IPv6 和 IPv4 连接。此参数默认打开。它只能在启动时设置一次。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
此参数为侦听套接字配置“TCP 保活”行为。如果省略此参数,则操作系统的设置将对套接字生效。如果将其设置为值“on”,则为套接字打开 SO_KEEPALIVE 选项。如果将其设置为值“off”,则为套接字关闭 SO_KEEPALIVE 选项。某些操作系统支持使用 TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT 套接字选项为每个套接字设置 TCP 保活参数。在这些系统上(目前为 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),可以使用 keepidlekeepintvlkeepcnt 参数对其进行配置。可以省略一个或两个参数,在这种情况下,将对相应的套接字选项生效系统默认设置。例如,
so_keepalive=30m::10
将空闲超时(TCP_KEEPIDLE)设置为 30 分钟,将探测间隔(TCP_KEEPINTVL)保留为其系统默认值,并将探测计数(TCP_KEEPCNT)设置为 10 个探测。

语法 邮件 { ... }
默认值
上下文 main

提供指定邮件服务器指令的配置文件上下文。

语法 max_errors number;
默认值
max_errors 5;
上下文 mailserver

此指令出现在 1.21.0 版本中。

设置在关闭连接之前协议错误的数量。

语法 protocol imap | pop3 | smtp;
默认值
上下文 服务器

设置代理服务器的协议。支持的协议有 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;
上下文 mailserver

配置用于查找客户端主机名的名称服务器,以便将其传递给 身份验证服务器,并在代理 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 time;
默认值
resolver_timeout 30s;
上下文 mailserver

设置 DNS 操作的超时,例如

resolver_timeout 5s;

语法 服务器 { ... }
默认值
上下文 邮件

设置服务器的配置。

语法 server_name name;
默认值
server_name hostname;
上下文 mailserver

设置在以下情况下使用的服务器名称

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

语法 timeout time;
默认值
timeout 60s;
上下文 mailserver

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