Модуль ngx_stream_proxy_module

Пример конфигурации
Директивы
     proxy_bind
     proxy_buffer_size
     proxy_connect_timeout
     proxy_download_rate
     proxy_next_upstream
     proxy_next_upstream_timeout
     proxy_next_upstream_tries
     proxy_pass
     proxy_protocol
     proxy_responses
     proxy_ssl
     proxy_ssl_certificate
     proxy_ssl_certificate_key
     proxy_ssl_ciphers
     proxy_ssl_crl
     proxy_ssl_name
     proxy_ssl_password_file
     proxy_ssl_server_name
     proxy_ssl_session_reuse
     proxy_ssl_protocols
     proxy_ssl_trusted_certificate
     proxy_ssl_verify
     proxy_ssl_verify_depth
     proxy_timeout
     proxy_upload_rate

Модуль ngx_stream_proxy_module (1.9.0) позволяет проксировать потоки данных по TCP, UDP (1.9.13) и UNIX-сокетам.

Пример конфигурации

server {
    listen 127.0.0.1:12345;
    proxy_pass 127.0.0.1:8080;
}

server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass example.com:12345;
}

server {
    listen 53 udp;
    proxy_responses 1;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}

server {
    listen [::1]:12345;
    proxy_pass unix:/tmp/stream.socket;
}

Директивы

Синтаксис: proxy_bind address [transparent] | off;
Умолчание:
Контекст: stream, server

Эта директива появилась в версии 1.9.2.

Задаёт локальный IP-адрес, который будет использоваться в исходящих соединениях с проксируемым сервером. В значении параметра допустимо использование переменных (1.11.2). Специальное значение off отменяет действие унаследованной с предыдущего уровня конфигурации директивы proxy_bind, позволяя системе самостоятельно выбирать локальный IP-адрес.

Параметр transparent (1.11.0) позволяет задать нелокальный IP-aдрес, который будет использоваться в исходящих соединениях с проксируемым сервером, например, реальный IP-адрес клиента:

proxy_bind $remote_addr transparent;

Для работы параметра необходимо запустить рабочие процессы nginx с привилегиями суперпользователя, а также настроить таблицу маршрутизации ядра для перехвата сетевого трафика с проксируемого сервера.

Синтаксис: proxy_buffer_size размер;
Умолчание:
proxy_buffer_size 16k;
Контекст: stream, server

Эта директива появилась в версии 1.9.4.

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

Синтаксис: proxy_connect_timeout время;
Умолчание:
proxy_connect_timeout 60s;
Контекст: stream, server

Задаёт таймаут для установления соединения с проксированным сервером.

Синтаксис: proxy_download_rate скорость;
Умолчание:
proxy_download_rate 0;
Контекст: stream, server

Эта директива появилась в версии 1.9.3.

Ограничивает скорость чтения данных от проксируемого сервера. Скорость задаётся в байтах в секунду. Значение 0 отключает ограничение скорости. Ограничение устанавливается на соединение, поэтому, если nginx одновременно откроет два соединения к проксируемому серверу, суммарная скорость будет вдвое выше заданного ограничения.

Синтаксис: proxy_next_upstream on | off;
Умолчание:
proxy_next_upstream on;
Контекст: stream, server

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

Передача соединения следующему серверу может быть ограничена по количеству попыток и по времени.

Синтаксис: proxy_next_upstream_timeout время;
Умолчание:
proxy_next_upstream_timeout 0;
Контекст: stream, server

Ограничивает время, в течение которого возможна передача соединения следующему серверу. Значение 0 отключает это ограничение.

Синтаксис: proxy_next_upstream_tries число;
Умолчание:
proxy_next_upstream_tries 0;
Контекст: stream, server

Ограничивает число допустимых попыток для передачи соединения следующему серверу. Значение 0 отключает это ограничение.

Синтаксис: proxy_pass адрес;
Умолчание:
Контекст: server

Задаёт адрес проксируемого сервера. Адрес может быть указан в виде доменного имени или IP-адреса, и порта:

proxy_pass localhost:12345;

или в виде пути UNIX-сокета:

proxy_pass unix:/tmp/stream.socket;

Если доменному имени соответствует несколько адресов, то все они будут использоваться по очереди (round-robin). Кроме того, в качестве адреса можно указать группу серверов.

Адрес можно также задать с помощью переменных (1.11.3):

proxy_pass $upstream;

В этом случае имя сервера ищется среди описанных групп серверов и если не найдено, то определяется с помощью resolver’а.

Синтаксис: proxy_protocol on | off;
Умолчание:
proxy_protocol off;
Контекст: stream, server

Эта директива появилась в версии 1.9.2.

Включает протокол PROXY для соединений с проксируемым сервером.

Синтаксис: proxy_responses число;
Умолчание:
Контекст: stream, server

Эта директива появилась в версии 1.9.13.

Задаёт количество датаграмм, ожидаемых от проксируемого сервера в ответ на запрос клиента в случае, если используется протокол UDP. По умолчанию количество датаграмм не ограничено: ответные датаграммы будут отправляться до истечения значения proxy_timeout.

Синтаксис: proxy_ssl on | off;
Умолчание:
proxy_ssl off;
Контекст: stream, server

Включает протоколы SSL/TLS для соединений с проксируемым сервером.

Синтаксис: proxy_ssl_certificate файл;
Умолчание:
Контекст: stream, server

Задаёт файл с сертификатом в формате PEM для аутентификации на проксируемом сервере.

Синтаксис: proxy_ssl_certificate_key файл;
Умолчание:
Контекст: stream, server

Задаёт файл с секретным ключом в формате PEM для аутентификации на проксируемом сервере.

Синтаксис: proxy_ssl_ciphers шифры;
Умолчание:
proxy_ssl_ciphers DEFAULT;
Контекст: stream, server

Описывает разрешённые шифры для соединений с проксируемым сервером. Шифры задаются в формате, поддерживаемом библиотекой OpenSSL.

Полный список можно посмотреть с помощью команды “openssl ciphers”.

Синтаксис: proxy_ssl_crl файл;
Умолчание:
Контекст: stream, server

Указывает файл с отозванными сертификатами (CRL) в формате PEM, используемыми при проверке сертификата проксируемого сервера.

Синтаксис: proxy_ssl_name имя;
Умолчание:
proxy_ssl_name хост из proxy_pass;
Контекст: stream, server

Позволяет переопределить имя сервера, используемое при проверке сертификата проксируемого сервера, а также для передачи его через SNI при установлении соединения с проксируемым сервером. Имя сервера можно также задать с помощью переменных (1.11.3).

По умолчанию используется имя хоста из адреса, заданного директивой proxy_pass.

Синтаксис: proxy_ssl_password_file файл;
Умолчание:
Контекст: stream, server

Задаёт файл с паролями от секретных ключей, где каждый пароль указан на отдельной строке. Пароли применяются по очереди в момент загрузки ключа.

Синтаксис: proxy_ssl_server_name on | off;
Умолчание:
proxy_ssl_server_name off;
Контекст: stream, server

Разрешает или запрещает передачу имени сервера через расширение Server Name Indication протокола TLS (SNI, RFC 6066) при установлении соединения с проксируемым сервером.

Синтаксис: proxy_ssl_session_reuse on | off;
Умолчание:
proxy_ssl_session_reuse on;
Контекст: stream, server

Определяет, использовать ли повторно SSL-сессии при работе с проксируемым сервером. Если в логах появляются ошибки “SSL3_GET_FINISHED:digest check failed”, то можно попробовать выключить повторное использование сессий.

Синтаксис: proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
Умолчание:
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Контекст: stream, server

Разрешает указанные протоколы для соединений с проксируемым сервером.

Синтаксис: proxy_ssl_trusted_certificate файл;
Умолчание:
Контекст: stream, server

Задаёт файл с доверенными сертификатами CA в формате PEM, используемыми при проверке сертификата проксируемого сервера.

Синтаксис: proxy_ssl_verify on | off;
Умолчание:
proxy_ssl_verify off;
Контекст: stream, server

Разрешает или запрещает проверку сертификата проксируемого сервера.

Синтаксис: proxy_ssl_verify_depth число;
Умолчание:
proxy_ssl_verify_depth 1;
Контекст: stream, server

Устанавливает глубину проверки в цепочке сертификатов проксируемого сервера.

Синтаксис: proxy_timeout время;
Умолчание:
proxy_timeout 10m;
Контекст: stream, server

Задаёт таймаут между двумя идущими подряд операциями чтения или записи на клиентском соединении или соединении с проксируемым сервером. Если по истечении этого времени данные не передавались, соединение закрывается.

Синтаксис: proxy_upload_rate скорость;
Умолчание:
proxy_upload_rate 0;
Контекст: stream, server

Эта директива появилась в версии 1.9.3.

Ограничивает скорость чтения данных от клиента. Скорость задаётся в байтах в секунду. Значение 0 отключает ограничение скорости. Ограничение устанавливается на соединение, поэтому, если клиент одновременно откроет два соединения, суммарная скорость будет вдвое выше заданного ограничения.