Модуль ngx_mail_core_module
Пример конфигурации Директивы listen max_commands 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 |
Задаёт адрес
и порт
сокета, на котором сервер
будет принимать запросы.
Можно указать только порт.
Кроме того, адрес может быть именем сервера, например:
listen 127.0.0.1:110; listen *:110; listen 110; # то же, что и *: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
=число
-
задаёт параметр
backlog
в вызовеlisten()
, который ограничивает максимальный размер очереди ожидающих приёма соединений (1.9.2). По умолчаниюbacklog
устанавливается равным -1 для FreeBSD, DragonFly BSD и macOS, и 511 для других платформ. -
rcvbuf
=размер
-
задаёт размер буфера приёма
(параметр
SO_RCVBUF
) для слушающего сокета (1.11.13). -
sndbuf
=размер
-
задаёт размер буфера передачи
(параметр
SO_SNDBUF
) для слушающего сокета (1.11.13). -
bind
-
указывает, что для данной пары
адрес
:порт
нужно делатьbind()
отдельно. Это нужно потому, что если описаны несколько директивlisten
с одинаковым портом, но разными адресами, и одна из директивlisten
слушает на всех адресах для данного порта (*:
порт
), то nginx сделаетbind()
только на*:
порт
. Необходимо заметить, что в этом случае для определения адреса, на который пришло соединение, делается системный вызовgetsockname()
. Если же используются параметрыbacklog
,rcvbuf
,sndbuf
,ipv6only
илиso_keepalive
, то для данной парыадрес
:порт
всегда делается отдельный вызовbind()
. -
ipv6only
=on
|off
-
этот параметр определяет
(через параметр сокета
IPV6_V6ONLY
), будет ли слушающий на wildcard-адресе[::]
IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения. По умолчанию параметр включён. Установить его можно только один раз на старте. -
so_keepalive
=on
|off
|[keepidle
]:[keepintvl
]:[keepcnt
] -
этот параметр конфигурирует для слушающего сокета
поведение “TCP keepalive”.
Если этот параметр опущен, то для сокета будут действовать
настройки операционной системы.
Если он установлен в значение “
on
”, то для сокета включается параметрSO_KEEPALIVE
. Если он установлен в значение “off
”, то для сокета параметрSO_KEEPALIVE
выключается. Некоторые операционные системы поддерживают настройку параметров “TCP keepalive” на уровне сокета посредством параметровTCP_KEEPIDLE
,TCP_KEEPINTVL
иTCP_KEEPCNT
. На таких системах (в настоящий момент это Linux 2.4+, NetBSD 5+ и FreeBSD 9.0-STABLE) их можно сконфигурировать с помощью параметровkeepidle
,keepintvl
иkeepcnt
. Один или два параметра могут быть опущены, в таком случае для соответствующего параметра сокета будут действовать стандартные системные настройки. Например,
установит таймаут бездействия (so_keepalive=30m::10
TCP_KEEPIDLE
) в 30 минут, для интервала проб (TCP_KEEPINTVL
) будет действовать стандартная системная настройка, а счётчик проб (TCP_KEEPCNT
) будет равен 10.
Синтаксис: |
mail { ... } |
---|---|
Умолчание: | — |
Контекст: |
main |
Предоставляет контекст конфигурационного файла, в котором указываются директивы почтового сервера.
Синтаксис: |
max_commands |
---|---|
Умолчание: |
max_commands 1000; |
Контекст: |
mail , server |
Эта директива появилась в версии 1.25.5.
Задаёт максимальное количество команд, допускаемое в процессе аутентификации. Если ограничение достигнуто, а проксирование на бэкенд не началось, соединение закрывается.
Синтаксис: |
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 |
Задаёт серверы DNS, используемые для определения имени хоста клиента для передачи его на сервер аутентификации и в команде XCLIENT при проксировании SMTP. Например:
resolver 127.0.0.1 [::1]:5353;
Адрес может быть указан в виде доменного имени или IP-адреса, и необязательного порта (1.3.1, 1.2.2). Если порт не указан, используется порт 53. Серверы DNS опрашиваются циклически.
До версии 1.1.7 можно было задать лишь один DNS-сервер. Задание DNS-серверов с помощью IPv6-адресов поддерживается начиная с версий 1.3.1 и 1.2.2.
По умолчанию nginx будет искать как IPv4-, так и IPv6-адреса
при преобразовании имён в адреса.
Если поиск IPv4- или IPv6-адресов нежелателен,
можно указать параметр ipv4=off
(1.23.1) или
ipv6=off
.
Преобразование имён в IPv6-адреса поддерживается начиная с версии 1.5.8.
По умолчанию nginx кэширует ответы, используя значение TTL из ответа.
Необязательный параметр valid
позволяет это
переопределить:
resolver 127.0.0.1 [::1]:5353 valid=30s;
До версии 1.1.9 настройка времени кэширования была невозможна и nginx всегда кэшировал ответы на срок в 5 минут.
Для предотвращения DNS-спуфинга рекомендуется использовать DNS-серверы в защищённой доверенной локальной сети.
Специальное значение off
запрещает использование DNS.
Синтаксис: |
resolver_timeout |
---|---|
Умолчание: |
resolver_timeout 30s; |
Контекст: |
mail , server |
Задаёт таймаут для операций DNS, например:
resolver_timeout 5s;
Синтаксис: |
server { ... } |
---|---|
Умолчание: | — |
Контекст: |
mail |
Задаёт конфигурацию для сервера.
Синтаксис: |
server_name |
---|---|
Умолчание: |
server_name hostname; |
Контекст: |
mail , server |
Задаёт имя сервера, используемое:
- в начальном приветствии POP3/SMTP-сервера;
- в salt при аутентификации SASL-методом CRAM-MD5;
-
в команде
EHLO
при подключении к SMTP-бэкенду, если разрешена передача команды XCLIENT.
Если директива не указана, используется имя хоста (hostname) машины.
Синтаксис: |
timeout |
---|---|
Умолчание: |
timeout 60s; |
Контекст: |
mail , server |
Задаёт таймаут, который используется до начала проксирования на бэкенд.