Модуль ngx_stream_core_module
Пример конфигурации Директивы listen resolver resolver_timeout server stream tcp_nodelay |
Модуль ngx_stream_core_module
доступен начиная с версии 1.9.0.
По умолчанию этот модуль не собирается, его сборку необходимо
разрешить с помощью конфигурационного параметра
--with-stream
.
Пример конфигурации
worker_processes auto; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } stream { upstream backend { hash $remote_addr consistent; server backend1.example.com:12345 weight=5; server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; } upstream dns { server 192.168.0.1:53535; server dns.example.com:53; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass backend; } server { listen 127.0.0.1:53 udp; proxy_responses 1; proxy_timeout 20s; proxy_pass dns; } server { listen [::1]:12345; proxy_pass unix:/tmp/stream.socket; } }
Директивы
Синтаксис: |
listen
|
---|---|
Умолчание: | — |
Контекст: |
server |
Задаёт адрес
и порт
для сокета,
на котором сервер будет принимать соединения.
Можно указать только порт.
Кроме того, адрес может быть именем хоста, например:
listen 127.0.0.1:12345; listen *:12345; listen 12345; # то же, что и *:12345 listen localhost:12345;
IPv6-адреса задаются в квадратных скобках:
listen [::1]:12345; listen [::]:12345;
UNIX-сокеты задаются префиксом “unix:
”
listen unix:/var/run/nginx.sock;
Параметр ssl
указывает на то, что все соединения,
принимаемые на данном порту, должны работать в режиме SSL.
Параметр udp
конфигурирует слушающий сокет
для работы с датаграммами (1.9.13).
В директиве listen
можно также указать несколько
дополнительных параметров, специфичных для связанных с сокетами
системных вызовов.
-
backlog
=число
-
задаёт параметр
backlog
в вызовеlisten()
, который ограничивает максимальный размер очереди ожидающих приёма соединений (1.9.2). По умолчаниюbacklog
устанавливается равным -1 для FreeBSD, DragonFly BSD и Mac OS X, и 511 для других платформ. -
bind
-
параметр указывает, что для данной пары
адрес
:порт
нужно делатьbind()
отдельно. Это нужно потому, что если описаны несколько директивlisten
с одинаковым портом, но разными адресами, и одна из директивlisten
слушает на всех адресах для данного порта (*:
порт
), то nginx сделаетbind()
только на*:
порт
. Необходимо заметить, что в этом случае для определения адреса, на которой пришло соединение, делается системный вызовgetsockname()
. Если же используются параметрыipv6only
илиso_keepalive
, то для данной парыадрес
:порт
всегда делается отдельный вызовbind()
. -
ipv6only
=on
|off
-
этот параметр определяет
(через параметр сокета
IPV6_V6ONLY
), будет ли слушающий на wildcard-адресе[::]
IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения. По умолчанию параметр включён. Установить его можно только один раз на старте. -
reuseport
-
этот параметр (1.9.1) указывает, что нужно создавать отдельный слушающий сокет
для каждого рабочего процесса
(через параметр сокета
SO_REUSEPORT
), позволяя ядру распределять входящие соединения между рабочими процессами. В настоящий момент это работает только на Linux 3.9+ и DragonFly BSD.Ненадлежащее использование параметра может иметь последствия в плане безопасности.
-
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.
Разные серверы должны слушать на разных парах
адрес
:порт
.
Синтаксис: |
resolver
|
---|---|
Умолчание: | — |
Контекст: |
stream , server |
Задаёт серверы DNS, используемые для преобразования имён вышестоящих серверов в адреса, например:
resolver 127.0.0.1 [::1]:5353;
Адрес может быть указан в виде доменного имени или IP-адреса, и необязательного порта. Если порт не указан, используется порт 53. Серверы DNS опрашиваются циклически.
По умолчанию nginx будет искать как IPv4-, так и IPv6-адреса
при преобразовании имён в адреса.
Если поиск IPv6-адресов нежелателен,
можно указать параметр ipv6=off
.
По умолчанию nginx кэширует ответы, используя значение TTL из ответа.
Необязательный параметр valid
позволяет это
переопределить:
resolver 127.0.0.1 [::1]:5353 valid=30s;
Эта директива доступна как часть коммерческой подписки.
Синтаксис: |
resolver_timeout |
---|---|
Умолчание: |
resolver_timeout 30s; |
Контекст: |
stream , server |
Задаёт таймаут для преобразования имени в адрес, например:
resolver_timeout 5s;
Эта директива доступна как часть коммерческой подписки.
Синтаксис: |
server { ... } |
---|---|
Умолчание: | — |
Контекст: |
stream |
Задаёт конфигурацию для сервера.
Синтаксис: |
stream { ... } |
---|---|
Умолчание: | — |
Контекст: |
main |
Предоставляет контекст конфигурационного файла, в котором указываются директивы stream-сервера.
Синтаксис: |
tcp_nodelay |
---|---|
Умолчание: |
tcp_nodelay on; |
Контекст: |
stream , server |
Эта директива появилась в версии 1.9.4.
Разрешает или запрещает использование параметра TCP_NODELAY
.
Параметр включается как для клиентского соединения,
так и для соединения с проксируемым сервером.