Spec-Zone.ru › nginx

Модуль ngx_mail_core_module

  • Пример конфигурации
  • Директивы
  • listen
  • mail
  • 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 address:port [ssl] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [multipath] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Значение по умолчанию: —
Контекст: server

Задаёт address и port сокета, на котором сервер будет принимать запросы. Можно указать только порт. Адресом также может быть имя хоста, например:

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;

Разные серверы должны прослушивать разные пары address:port.

Параметр ssl позволяет указать, что все соединения, принимаемые на этом порту, должны работать в режиме SSL.

Параметр proxy_protocol (1.19.8) позволяет указать, что все соединения, принимаемые на этом порту, должны использовать протокол PROXY. Полученная информация передаётся серверу аутентификации и может использоваться для изменения адреса клиента.

Директива listen может иметь несколько дополнительных параметров, относящихся к системным вызовам, связанным с сокетами.

backlog=number
задаёт параметр backlog в вызове listen(), который ограничивает максимальную длину очереди ожидающих соединений (1.9.2). По умолчанию backlog устанавливается в -1 в FreeBSD, DragonFly BSD и macOS, а на других платформах — в 511.
rcvbuf=size
задаёт размер буфера приёма (параметр SO_RCVBUF) для прослушивающего сокета (1.11.13).
sndbuf=size
задаёт размер буфера отправки (параметр SO_SNDBUF) для прослушивающего сокета (1.11.13).
bind
этот параметр указывает выполнять отдельный вызов bind() для заданной пары адрес:порт. Дело в том, что если имеется несколько директив listen с одним и тем же портом, но разными адресами, и одна из директив listen прослушивает все адреса для заданного порта (*:port), nginx будет выполнять bind() только для *:port. Следует отметить, что в этом случае для определения адреса, принявшего соединение, будет выполнен системный вызов getsockname(). Если используются параметры backlog, rcvbuf, sndbuf, ipv6only, multipath или so_keepalive, то для заданной пары address:port всегда будет выполняться отдельный вызов bind().
ipv6only=on|off
этот параметр определяет (с помощью параметра сокета IPV6_V6ONLY), будет ли IPv6-сокет, прослушивающий адрес-джокер [::], принимать только IPv6-соединения или одновременно IPv6- и IPv4-соединения. По умолчанию этот параметр включён. Его можно задать только один раз при запуске.
multipath
этот параметр (1.29.7) включает протокол Multipath TCP (IPPROTO_MPTCP) для прослушивающего сокета. В настоящее время он работает только в Linux 5.6+.
Добавление или удаление этого параметра также включит параметр сокета SO_REUSEPORT, что может иметь последствия для безопасности: см. документацию.
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
этот параметр настраивает поведение «TCP keepalive» для прослушивающего сокета. Если параметр не указан, для сокета используются настройки операционной системы. Если ему задано значение «on», для сокета включается параметр SO_KEEPALIVE. Если ему задано значение «off», для сокета отключается параметр SO_KEEPALIVE. Некоторые операционные системы поддерживают настройку параметров TCP keepalive отдельно для каждого сокета с помощью параметров сокета TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT. В таких системах (в настоящее время это Linux, NetBSD, Dragonfly, FreeBSD и macOS) их можно настраивать с помощью параметров keepidle, keepintvl и keepcnt. Один или два параметра можно не указывать; в таком случае будут использоваться системные значения по умолчанию для соответствующих параметров сокета. Например,
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

Задаёт протокол для проксируемого сервера. Поддерживаются протоколы 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 address ... [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone];
resolver off;
Значение по умолчанию: resolver off;
Контекст: mail, server

Настраивает серверы имён, используемые для определения имени хоста клиента, чтобы передать его серверу аутентификации, а также для команды XCLIENT при проксировании SMTP. Например:

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 ищет адреса 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-серверы в должным образом защищённой доверенной локальной сети.

Необязательный параметр status_zone (1.17.1) включает сбор статистики запросов и ответов DNS-сервера в указанной zone. Параметр доступен в рамках нашей коммерческой подписки.

Специальное значение off отключает разрешение имён.

Синтаксис: resolver_timeout time;
Значение по умолчанию: resolver_timeout 30s;
Контекст: mail, server

Задаёт тайм-аут для операций DNS, например:

resolver_timeout 5s;
Синтаксис: server { ... }
Значение по умолчанию: —
Контекст: mail

Задаёт конфигурацию сервера.

Синтаксис: server_name name;
Значение по умолчанию: server_name hostname;
Контекст: mail, server

Задаёт имя сервера, которое используется:

  • в приветствии POP3/SMTP-сервера;
  • в качестве соли при аутентификации SASL CRAM-MD5;
  • в команде EHLO при подключении к серверу SMTP, если включена передача команды XCLIENT.

Если директива не задана, используется имя хоста машины.

Синтаксис: timeout time;
Значение по умолчанию: timeout 60s;
Контекст: mail, server

Задаёт тайм-аут, который используется перед началом проксирования к бэкенду.

© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/mail/ngx_mail_core_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API