Spec-Zone.ru › nginx

Модуль ngx_stream_proxy_module

  • Пример конфигурации
  • Директивы
  • proxy_bind
  • proxy_buffer_size
  • proxy_connect_timeout
  • proxy_download_rate
  • proxy_half_close
  • proxy_next_upstream
  • proxy_next_upstream_timeout
  • proxy_next_upstream_tries
  • proxy_pass
  • proxy_protocol
  • proxy_requests
  • proxy_responses
  • proxy_session_drop
  • proxy_socket_keepalive
  • proxy_ssl
  • proxy_ssl_certificate
  • proxy_ssl_certificate_key
  • proxy_ssl_ciphers
  • proxy_ssl_conf_command
  • proxy_ssl_crl
  • proxy_ssl_name
  • proxy_ssl_password_file
  • proxy_ssl_protocols
  • proxy_ssl_server_name
  • proxy_ssl_session_reuse
  • 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 reuseport;
    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-адрес для исходящих соединений с проксируемым сервером, используя указанный локальный IP address. Значение параметра может содержать переменные (1.11.2). Специальное значение off отменяет эффект директивы proxy_bind унаследованной от предыдущего уровня конфигурации, что позволяет системе автоматически назначить локальный IP-адрес.

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

proxy_bind $remote_addr transparent;

Для работы этого параметра обычно необходимо запускать рабочие процессы nginx с правами суперпользователя. В Linux это не требуется (1.13.8), так как если параметр transparent указан, рабочие процессы наследуют способность CAP_NET_RAW от главного процесса. Также необходимо настроить таблицу маршрутизации ядра для перехвата сетевого трафика с проксируемого сервера.

Синтаксис: proxy_buffer_size size;
Значение по умолчанию: proxy_buffer_size 16k;
Контекст: stream, server

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

Устанавливает размер буфера для чтения данных с проксируемого сервера. Также устанавливает размер буфера для чтения данных от клиента.

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

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

Синтаксис: proxy_download_rate rate;
Значение по умолчанию: proxy_download_rate 0;
Контекст: stream, server

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

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

Значение параметра может содержать переменные (1.17.0). Может быть полезно в тех случаях, когда скорость должна ограничиваться в зависимости от определенных условий:

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_download_rate $rate;
Синтаксис: proxy_half_close on | off;
Значение по умолчанию: proxy_half_close off;
Контекст: stream, server

Данная директива появилась в версии 1.21.4.

Включает или выключает закрытие каждого направления TCP-соединения независимо («полузакрытие TCP»). Если включено, проксирование по TCP будет поддерживаться до тех пор, пока обе стороны не закроют соединение.

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

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

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

Синтаксис: proxy_next_upstream_timeout time;
Значение по умолчанию: proxy_next_upstream_timeout 0;
Контекст: stream, server

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

Синтаксис: proxy_next_upstream_tries number;
Значение по умолчанию: proxy_next_upstream_tries 0;
Контекст: stream, server

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

Синтаксис: proxy_pass address;
Значение по умолчанию: —
Контекст: server

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

proxy_pass localhost:12345;

или как путь к сокету UNIX-домена:

proxy_pass unix:/tmp/stream.socket;

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

Адрес также может быть указан с использованием переменных (1.11.3):

proxy_pass $upstream;

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

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

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

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

Синтаксис: proxy_requests number;
Значение по умолчанию: proxy_requests 0;
Контекст: stream, server

Данная директива появилась в версии 1.15.7.

Устанавливает количество клиентских датаграмм, после получения которых связь между клиентом и существующей сессией UDP-потока разрывается. После получения указанного количества датаграмм, следующая датаграмма от того же клиента запускает новую сессию. Сессия завершается, когда все клиентские датаграммы переданы проксируемому серверу и получено ожидаемое количество ответов, или при достижении таймаута.

Синтаксис: proxy_responses number;
Значение по умолчанию: —
Контекст: stream, server

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

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

Если указано нулевое значение, ответ не ожидается. Однако, если ответ получен, и сессия еще не завершена, ответ будет обработан.

Синтаксис: proxy_session_drop on | off;
Значение по умолчанию: proxy_session_drop off;
Контекст: stream, server

Данная директива появилась в версии 1.15.8.

Разрешает завершение всех сессий с прокси-сервером после его удаления из группы или отметки как постоянно недоступного. Это может произойти из-за переразрешения или с помощью команды API DELETE. Сервер может быть помечен как постоянно недоступный, если он считается неисправным или с помощью команды API PATCH. Каждая сессия завершается при обработке следующего события чтения или записи для клиента или прокси-сервера.

Данная директива доступна в рамках нашей коммерческой подписки.
Синтаксис: proxy_socket_keepalive on | off;
По умолчанию: proxy_socket_keepalive off;
Контекст: stream, server

Данная директива появилась в версии 1.15.6.

Настраивает поведение «TCP keepalive» для исходящих соединений с прокси-сервером. По умолчанию действуют настройки операционной системы для сокета. Если директива установлена в значение «on», опция сокета SO_KEEPALIVE включается для сокета.

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

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

Синтаксис: proxy_ssl_certificate file;
По умолчанию: —
Контекст: stream, server

Указывает file с сертификатом в формате PEM, используемым для аутентификации с прокси-сервером.

С версии 1.21.0 в имени file можно использовать переменные.

Синтаксис: proxy_ssl_certificate_key file;
По умолчанию: —
Контекст: stream, server

Указывает file с секретным ключом в формате PEM, используемым для аутентификации с прокси-сервером.

С версии 1.21.0 в имени file можно использовать переменные.

Синтаксис: proxy_ssl_ciphers ciphers;
По умолчанию: proxy_ssl_ciphers DEFAULT;
Контекст: stream, server

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

Полный список можно просмотреть, используя команду «openssl ciphers».

Синтаксис: proxy_ssl_conf_command name value;
По умолчанию: —
Контекст: stream, server

Данная директива появилась в версии 1.19.4.

Устанавливает произвольные команды конфигурации OpenSSL команд при установлении соединения с прокси-сервером.

Директива поддерживается при использовании OpenSSL 1.0.2 или выше.

Несколько директивы proxy_ssl_conf_command могут быть указаны на одном уровне. Эти директивы наследуются с предыдущего уровня конфигурации только в том случае, если нет директивы proxy_ssl_conf_command на текущем уровне.

Обратите внимание, что непосредственная настройка OpenSSL может привести к непредсказуемому поведению.
Синтаксис: proxy_ssl_crl file;
По умолчанию: —
Контекст: stream, server

Указывает file с отозванными сертификатами (CRL) в формате PEM, используемых для проверки сертификата прокси-сервера.

Синтаксис: proxy_ssl_name name;
По умолчанию: proxy_ssl_name host from proxy_pass;
Контекст: stream, server

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

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

Синтаксис: proxy_ssl_password_file file;
По умолчанию: —
Контекст: stream, server

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

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

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

Параметр TLSv1.3 используется по умолчанию с версии 1.23.4.
Синтаксис: proxy_ssl_server_name on | off;
По умолчанию: proxy_ssl_server_name off;
Контекст: stream, server

Включает или отключает передачу имени сервера через расширение TLS Server Name Indication (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_trusted_certificate file;
По умолчанию: —
Контекст: stream, server

Указывает file с доверенными сертификатами CA в формате PEM, используемыми для проверки сертификата прокси-сервера.

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

Включает или отключает проверку сертификата прокси-сервера.

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

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

Синтаксис: proxy_timeout timeout;
По умолчанию: proxy_timeout 10m;
Контекст: stream, server

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

Синтаксис: proxy_upload_rate rate;
По умолчанию: proxy_upload_rate 0;
Контекст: stream, server

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

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

Значение параметра может содержать переменные (1.17.0). Это может быть полезно в случаях, когда скорость должна ограничиваться в зависимости от определенного условия:

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_upload_rate $rate;

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

Spec-Zone.ru

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