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

Directives

Syntax:  listen address:port [ssl] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind]
         [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Default: —
Context: server

서버가 요청을 수신하는 소켓에 대해 addressport를 설정합니다. 포트만 지정할 수도 있습니다. 다음과 같이 주소가 호스트 이름일 수도 있습니다.

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

listen() 호출에 backlog 매개변수를 설정하여, 대기 중인 연결 대기열의 최대 길이를 제한합니다(1.9.2). 기본적으로 backlog는 FreeBSD, DragonFly BSD, macOS에서 -1로 설정되고, 다른 플랫폼에서는 511로 설정됩니다.

rcvbuf=size

리스닝 소켓에 대해 수신 버퍼 용량(SO_RCVBUF 옵션)을 설정합니다(1.11.13).

sndbuf=size

리스닝 소켓에 대해 전송 버퍼 용량(SO_SNDBUF 옵션)을 설정합니다(1.11.13).

bind

이 매개변수는 특정 주소:포트 쌍에 대해 별도의 bind() 호출을 보냅니다. 포트가 동일하지만 주소가 다른 listen 명령이 여러 개일 경우, listen 명령 중 하나가 특정 포트(*:port)에 대한 모든 주소를 수신하고, nginx는 *:port에만 bind()됩니다. 이 경우, getsockname() 시스템 호출을 보내서 연결을 수신한 주소를 확인해야 합니다. backlog, rcvbuf, sndbuf, ipv6only 또는 so_keepalive 매개변수를 사용할 경우, 항상 해당 address:port 쌍에 bind() 호출을 보냅니다.

ipv6only=on|off

이 매개변수는 (IPV6_V6ONLY 소켓 옵션을 통해) 와일드카드 주소 [::]를 수신하는 IPv6 소켓이 IPv6와 IPv4 연결에서 IPv6 연결만 수락하는지를 결정합니다. 이 매개변수는 기본적으로 활성화됩니다. 시작 시 한 번만 설정할 수 있습니다.

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]

이 매개변수는 리스닝 소켓에 “TCP keepalive” 동작을 구성합니다. 이 매개변수를 생략할 경우, 운영 체제 설정이 소켓에 적용됩니다. “on” 값으로 설정할 경우, SO_KEEPALIVE 옵션이 소켓에 활성화됩니다. “off” 값으로 설정할 경우, SO_KEEPALIVE 옵션이 소켓이 비활성화됩니다. 일부 운영 체제는 TCP_KEEPIDLE, TCP_KEEPINTVL 및 TCP_KEEPCNT 소켓 옵션을 사용하여 소켓별로 TCP keepalive 매개변수를 설정하도록 지원합니다. 이러한 시스템(현재 Linux 2.4+, NetBSD 5+ 및 FreeBSD 9.0-STABLE)의 경우, keepidlekeepintvl 및 keepcnt 매개변수를 사용하여 구성할 수 있습니다. 하나 또는 두 개의 매개변수를 생략할 수 있는데, 이 경우에는 해당 소켓 옵션에 대한 시스템 기본 설정이 적용됩니다. 예를 들어,

so_keepalive=30m::10

유휴 시간 초과(TCP_KEEPIDLE)를 30분으로 설정하고, 프로브 간격(TCP_KEEPINTVL)은 시스템 기본값으로 두고, 프로브 수(TCP_KEEPCNT)는 10개로 설정합니다.

Syntax:  mail { ... }
Default: —
Context: main

메일 서버 명령을 지정한 구성 파일 컨텍스트를 제공합니다.

Syntax:  max_errors number;
Default: max_errors 5;
Context: mail, server
This directive appeared in version 1.21.0.

연결이 닫힌 후 프로토콜 오류 수를 설정합니다.

Syntax:  protocol imap | pop3 | smtp;
Default: —
Context: 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을 사용해서 비활성화할 수 있습니다.

Syntax:  resolver address ... [valid=time] [ipv6=on|off] [status_zone=zone];

         resolver off;
Default: resolver off;
Context: 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는 변경 중에 IPv4와 IPv6 주소를 모두 검색합니다. IPv6 주소를 검색하고 싶지 않은 경우, 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)를 사용하면 지정된 zone에서 요청 및 응답의 DNS 서버 통계를 수집할 수 있습니다. 이 매개변수는 상업용 구독에서 제공합니다.

특수 값 off는 변환을 비활성화합니다.

Syntax:  resolver_timeout time;
Default: resolver_timeout 30s;
Context: mail, server

DNS 작업에 대한 시간 초과를 설정합니다. 예를 들어, 다음과 같습니다.

resolver_timeout 5s;
Syntax:  server { ... }
Default: —
Context: mail

서버에 대한 구성을 설정합니다.

Syntax:  server_name name;
Default: server_name hostname;
Context: mail, server

다음에서 사용한 서버 이름을 설정합니다.

  • 최초 POP3/SMTP 서버 그리팅
  • SASL CRAM-MD5 인증 시 Salt
  • SMTP 백엔드로 연결할 때 XCLIENT 명령 전달이 활성화되어 있는 경우, EHLO 명령

이 명령을 지정하지 않는 경우, 컴퓨터의 호스트 이름을 사용합니다.

Syntax:  timeout time;
Default: timeout 60s;
Context: mail, server

백엔드로의 프록시를 시작하기 전에 사용할 시간제한을 설정합니다.