Модуль ngx_stream_proxy_module
- Пример конфигурации
- Директивы
- proxy_bind
- proxy_bind_dynamic
- 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_alpn
- proxy_ssl_certificate
- proxy_ssl_certificate_cache
- proxy_ssl_certificate_key
- proxy_ssl_ciphers
- proxy_ssl_conf_command
- proxy_ssl_crl
- proxy_ssl_key_log
- 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-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_bind_dynamic on | off; |
|---|---|
| По умолчанию: | proxy_bind_dynamic off; |
| Контекст: | stream, server |
Эта директива появилась в версии 1.29.3.
Если параметр включён, операция bind выполняется при каждой попытке подключения.
Эта директива доступна в рамках нашей коммерческой подписки.
| Синтаксис: | proxy_buffer_size size; |
|---|---|
| По умолчанию: | proxy_buffer_size 16k; |
| Контекст: | stream, server |
Эта директива появилась в версии 1.9.4.
Задаёт size буфера, используемого для чтения данных от проксируемого сервера. Также задаёт size буфера, используемого для чтения данных от клиента.
| Синтаксис: | proxy_connect_timeout time; |
|---|---|
| По умолчанию: | proxy_connect_timeout 60s; |
| Контекст: | stream, server |
Задаёт таймаут для установки соединения с проксируемым сервером.
| Синтаксис: | proxy_download_rate rate; |
|---|---|
| По умолчанию: | proxy_download_rate 0; |
| Контекст: | stream, server |
Эта директива появилась в версии 1.9.3.
Ограничивает скорость чтения данных от проксируемого сервера. rate указывается в байтах в секунду. Нулевое значение отключает ограничение скорости. Ограничение устанавливается для каждого соединения, поэтому, если 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_alpn protocol ...; |
|---|---|
| По умолчанию: | — |
| Контекст: | stream, server |
Эта директива появилась в версии 1.31.0.
Задаёт список протоколов, объявляемых с помощью расширения ALPN при установлении соединения с проксируемым сервером. Например:
proxy_ssl_alpn h2 http/1.1;
Значение параметра может содержать переменные:
proxy_ssl_alpn $ssl_alpn_protocol;
| Синтаксис: | proxy_ssl_certificate file; |
|---|---|
| По умолчанию: | — |
| Контекст: | stream, server |
Задаёт file с сертификатом в формате PEM, используемым для аутентификации на проксируемом сервере.
Начиная с версии 1.21.0, в имени file можно использовать переменные.
| Синтаксис: | proxy_ssl_certificate_cache off;proxy_ssl_certificate_cache
max=N
[inactive=time]
[valid=time]; |
|---|---|
| По умолчанию: | proxy_ssl_certificate_cache off; |
| Контекст: | stream, server |
Эта директива появилась в версии 1.27.4.
Определяет кэш для хранения SSL-сертификатов и секретных ключей, указанных с помощью переменных.
Директива принимает следующие параметры:
-
max - задаёт максимальное количество элементов в кэше; при переполнении кэша удаляются элементы, которые использовались дольше всего назад (LRU);
-
inactive - задаёт время, по истечении которого элемент удаляется из кэша, если к нему не обращались в течение этого времени; по умолчанию — 10 секунд;
-
valid - задаёт время, в течение которого элемент в кэше считается действительным и может быть повторно использован; по умолчанию — 60 секунд. Сертификаты, срок действия кэша которых истёк, будут загружены или проверены повторно;
-
off - отключает кэш.
Пример:
proxy_ssl_certificate $proxy_ssl_server_name.crt; proxy_ssl_certificate_key $proxy_ssl_server_name.key; proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;
| Синтаксис: | proxy_ssl_certificate_key file; |
|---|---|
| По умолчанию: | — |
| Контекст: | stream, server |
Вместо file можно указать значение store:scheme:id (1.29.0), которое используется для загрузки секретного ключа с указанным id и URI зарегистрированного провайдера OpenSSL scheme, например pkcs11.
Задаёт 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_key_log path; |
|---|---|
| По умолчанию: | — |
| Контекст: | stream, server |
Эта директива появилась в версии 1.27.2.
Включает журналирование SSL-ключей соединения с проксируемым сервером и задаёт путь к файлу журнала ключей. Ключи записываются в формате SSLKEYLOGFILE, совместимом с Wireshark.
Эта директива доступна в рамках нашей коммерческой подписки.
| Синтаксис: | 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.2 TLSv1.3; |
| Контекст: | stream, server |
Включает указанные протоколы для соединений с проксируемым сервером.
С версии 1.23.4 по умолчанию используется параметр TLSv1.3.
| Синтаксис: | 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-сеансы при работе с проксируемым сервером. Если в журналах появляются ошибки «digest check failed», попробуйте отключить повторное использование сеансов.
| Синтаксис: | proxy_ssl_trusted_certificate file; |
|---|---|
| По умолчанию: | — |
| Контекст: | stream, server |
Задаёт file с доверенными сертификатами удостоверяющих центров в формате 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-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html