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
서버가 요청을 수신하는 소켓에 대해 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
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)의 경우, keepidle, keepintvl 및 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
백엔드로의 프록시를 시작하기 전에 사용할 시간제한을 설정합니다.