nginx中文文档-ngx_mail_core_module

nginx邮件服务器模块。

该模块默认不会构建,需要通过–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

语法: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

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