该模块默认不会构建,需要通过–with-mail配置参数启用。
示例配置
worker_processes 1; 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
语法:listen address:port [ssl] [backlog=number] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]
默认:—
上下文:server
设置服务器将接受请求的socket的地址和端口。可以只指定端口。地址可以是主机名,例如:
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-domain sockets(1.3.5+)指定以“unix:”前缀:
listen unix:/var/run/nginx.sock;
不同的服务器必须监听不同的地址:端口对。
ssl参数指定所有这个端口接受的连接需要工作在SSL模式。
listen指令可以有多个附加参数指定socket相关的系统调用。
backlog=number
设置listen()调用的backlog参数,用于限制等待连接队列的最大长度(1.9.2+)。默认情况下,FreeBSD、DragonFly BSD和Mac OS X系统上是-1,其他平台上是511。
bind
这个参数为给定的地址端口对执行单独的bind()调用。实际上,如果有多个listen指令是相同的端口号但不同的地址,并且其中一个listen指令在所有地址上监听给定的端口(*:port),nginx将只绑定*:port。需要注意的是getsockname()系统调用会在这种情况下发生以决定接受连接的地址。如果使用了ipv6only或so_keepalive参数,那么对于一个给定的地址端口对,总会发生一个单独的bind()调用。
ipv6only=on|off
该参数决定(通过IPV6_V6ONLY socket选项)一个通过通配符地址[::]的IPv6 socket监听将只接受ipv6连接还是ipv6和ipv4都接受。该参数默认是开启的。可以在启动时设置一次。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
这个参数配置了监听socket的“TCP keepalive”行为。如果该参数省略,则操作系统的设置会影响socket。如果它设置为“on”,SO_KEEPALIVE选项会被打开。如果值为“off”SO_KEEPALIVE选项将被关闭。一些操作系统支持设置TCP keepalive参数使用TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT socket选项。在这些操作系统上(目前,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
提供邮件服务器指令的配置文件上下文环境。
protocol
语法:protocol imap | pop3 | smtp
默认:—
上下文: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 address … [valid=time]
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版本之前,只能配置一个名称服务器。指定IPv6地址的名称服务器从1.3.1和1.2.2版本开始支持。
默认情况下,nginx缓存响应结果使用TTL值。一个可选的valid参数可以覆盖它:
resolver 127.0.0.1 [::1]:5353 valid=30s;
在1.1.9版本之前,不能调整缓存时间,nginx总会缓存结果5分钟。
特殊值off禁用解析。
resolver_timeout
语法:resolver_timeout time
默认:resolver_timeout 30s
上下文:mail, server
设置DNS操作的超时时间,例如:
resolver_timeout 5s;
server
语法:server { … }
默认:—
上下文:mail
设置服务器的配置。
server_name
语法:server_name name
默认:server_name hostname
上下文:mail, server
设置服务器名称用于:
- 初始化POP3/SMTP服务器握手
- 在SASL CRAM-MD5验证中的盐
- 连接到SMTP上游服务器的EHLO命令,如果XCLIENT命令开启
如果指令没有定义,则使用机器的主机名称。
timeout
语法:timeout time
默认:timeout 60s
上下文:mail, server
设置超时时间,用在代理到后端开始之前。