srt: Модуль SRT для Nginx
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-srt
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-srt
Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:
load_module modules/ngx_srt_module.so;
Этот документ описывает nginx-module-srt v1.1, выпущенный 5 февраля 2024 года.
Haivision SRT (Secure Reliable Transfer) / TCP шлюз. Поддерживает как SRT к TCP, так и TCP к SRT, включая двунаправленный обмен данными.
Реализация использует libsrt для SRT-коммуникации. Код libsrt выполняется в побочном потоке, используются уведомления eventfd для связи с основным потоком nginx.
Конфигурация
Пример конфигурации
## SRT -> TCP прокси
srt {
server {
listen 4321;
proxy_pass tcp://127.0.0.1:5678;
}
}
## TCP -> SRT прокси
stream {
server {
listen 5432;
srt_proxy_pass srt://127.0.0.1:4321;
}
}
Основные директивы srt
srt
- синтаксис:
srt { ... } - по умолчанию:
- - контекст:
main
Обеспечивает контекст конфигурационного файла, в котором указываются директивы srt server.
server
- синтаксис:
server { ... } - по умолчанию:
- - контекст:
srt
Устанавливает конфигурацию для сервера.
listen
- синтаксис:
listen address:port [backlog=number] [bind] [ipv6only=on|off] [reuseport]; - по умолчанию:
- - контекст:
server
Устанавливает адрес и порт для UDP-сокета, на котором сервер будет принимать соединения.
Смотрите документацию директивы listen модуля nginx stream для получения дополнительных сведений о поддерживаемых опциональных параметрах.
variables_hash_max_size
- синтаксис:
variables_hash_max_size size; - по умолчанию:
1024 - контекст:
srt
Устанавливает максимальный размер хеш-таблицы переменных.
variables_hash_bucket_size
- синтаксис:
variables_hash_bucket_size size; - по умолчанию:
64 - контекст:
srt
Устанавливает размер ведра для хеш-таблицы переменных.
error_log
- синтаксис:
error_log file [level]; - по умолчанию:
logs/error.log error - контекст:
srt, server
Настраивает ведение журнала, смотрите документацию директивы error_log ядра nginx для получения дополнительных сведений.
fc_pkts
- синтаксис:
fc_pkts number; - по умолчанию:
25600 - контекст:
srt, server
Устанавливает максимальное количество "в пути" пакетов (пакеты, которые были отправлены, но еще не подтверждены).
Смотрите документацию libsrt по опции SRTO_FC для получения дополнительных сведений.
mss
- синтаксис:
mss size; - по умолчанию:
1500 - контекст:
srt, server
Максимальный размер сегмента в байтах.
Смотрите документацию libsrt по опции SRTO_MSS для получения дополнительных сведений.
recv_buf
- синтаксис:
recv_buf size; - по умолчанию:
8192 buffers - контекст:
srt, server
Размер буфера приема в байтах.
Смотрите документацию libsrt по опции SRTO_RCVBUF для получения дополнительных сведений.
recv_udp_buf
- синтаксис:
recv_udp_buf size; - по умолчанию:
8192 buffers - контекст:
srt, server
Размер буфера приема UDP-сокета в байтах.
Смотрите документацию libsrt по опции SRTO_UDP_RCVBUF для получения дополнительных сведений.
recv_latency
- синтаксис:
recv_latency size; - по умолчанию:
120ms - контекст:
srt, server
Задержка на стороне приема в миллисекундах.
Смотрите документацию libsrt по опции SRTO_RCVLATENCY для получения дополнительных сведений.
send_buf
- синтаксис:
send_buf size; - по умолчанию:
8192 buffers - контекст:
srt, server
Размер буфера отправки в байтах.
Смотрите документацию libsrt по опции SRTO_SNDBUF для получения дополнительных сведений.
send_udp_buf
- синтаксис:
send_udp_buf size; - по умолчанию:
65536 - контекст:
srt, server
Размер буфера отправки UDP-сокета в байтах.
Смотрите документацию libsrt по опции SRTO_UDP_SNDBUF для получения дополнительных сведений.
send_latency
- синтаксис:
send_latency size; - по умолчанию:
120ms - контекст:
srt, server
Минимальная задержка приема, предоставляемая отправителем.
Смотрите документацию libsrt по опции SRTO_PEERLATENCY для получения дополнительных сведений.
passphrase
- синтаксис:
passphrase expr; - по умолчанию: ``
- контекст:
srt, server
Устанавливает пароль для шифрования, смотрите документацию libsrt по опции SRTO_PASSPHRASE для получения дополнительных сведений.
Значение параметра может содержать переменные.
in_buf_size
- синтаксис:
in_buf_size size; - по умолчанию:
64k - контекст:
srt, server
Устанавливает размер буфера, используемого для чтения данных от клиента.
Директивы srt map
map
- синтаксис:
map string $variable { ... } - по умолчанию: ``
- контекст:
srt
Создает новую переменную, значение которой зависит от значений одной или нескольких исходных переменных, указанных в первом параметре.
Смотрите документацию директивы map модуля nginx stream для получения дополнительных сведений.
map_hash_max_size
- синтаксис:
map_hash_max_size size; - по умолчанию:
2048 - контекст:
srt
Устанавливает максимальный размер хеш-таблицы переменных map.
map_hash_bucket_size
- синтаксис:
map_hash_bucket_size size; - по умолчанию:
32|64|128 - контекст:
srt
Устанавливает размер ведра для хеш-таблицы переменных map.
Директивы srt log
access_log
- синтаксис:
access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition]; - по умолчанию:
off - контекст:
srt, server
Устанавливает путь, формат и конфигурацию для записи буферизованного журнала.
Смотрите документацию директивы access_log модуля nginx stream для получения дополнительных сведений.
log_format
- синтаксис:
log_format name [escape=default|json|none] string ...; - по умолчанию: ``
- контекст:
srt
Определяет формат журнала.
Смотрите документацию директивы log_format модуля nginx stream для получения дополнительных сведений.
open_log_file_cache
- синтаксис:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; - по умолчанию:
off - контекст:
srt, server
Определяет кэш, который хранит дескрипторы файлов часто используемых журналов, имена которых содержат переменные.
Смотрите документацию директивы open_log_file_cache модуля nginx stream для получения дополнительных сведений.
Директивы srt proxy
proxy_pass
- синтаксис:
proxy_pass address; - по умолчанию: ``
- контекст:
srt, server
Устанавливает адрес проксируемого сервера.
proxy_connect_timeout
- синтаксис:
proxy_connect_timeout timeout; - по умолчанию:
60s - контекст:
srt, server
Определяет тайм-аут для установления соединения с проксируемым сервером.
proxy_timeout
- синтаксис:
proxy_timeout timeout; - по умолчанию:
10m - контекст:
srt, server
Устанавливает тайм-аут между двумя последовательными операциями чтения или записи на соединениях с клиентом или проксируемым сервером. Если данные не передаются в течение этого времени, соединение закрывается.
proxy_buffer_size
- синтаксис:
proxy_buffer_size size; - по умолчанию:
64k - контекст:
srt, server
Устанавливает размер буфера, используемого для чтения данных с проксируемого сервера.
proxy_protocol
- синтаксис:
proxy_protocol on | off; - по умолчанию:
off - контекст:
srt, server
Включает протокол PROXY для соединений с проксируемым сервером.
proxy_header
- синтаксис:
proxy_header expr; - по умолчанию: ``
- контекст:
srt, server
Определяет строку, которая отправляется на проксируемый сервер перед любыми данными, полученными по SRT.
Значение параметра может содержать переменные.
Разные директивы srt set
set_decode_base64
- синтаксис:
set_decode_base64 $dst src; - по умолчанию: ``
- контекст:
srt
Выполняет декодирование base64 значения второго аргумента и присваивает результат переменной, указанной в первом аргументе.
set_decode_base64url
- синтаксис:
set_decode_base64url $dst src; - по умолчанию: ``
- контекст:
srt
Выполняет безопасное для URL декодирование base64 значения второго аргумента и присваивает результат переменной, указанной в первом аргументе.
set_aes_decrypt
- синтаксис:
set_aes_decrypt $dst base64_key base64_iv src; - по умолчанию: ``
- контекст:
srt
Выполняет расшифровку AES-256-CBC значения последнего аргумента, используя предоставленный ключ/iv, и присваивает результат переменной, указанной в первом аргументе.
Директивы srt proxy для потока
srt_proxy_pass
- синтаксис:
srt_proxy_pass address; - по умолчанию: ``
- контекст:
stream, server
Устанавливает адрес проксируемого сервера.
srt_proxy_connect_timeout
- синтаксис:
srt_proxy_connect_timeout timeout; - по умолчанию:
60s - контекст:
srt, server
Определяет тайм-аут для установления соединения с проксируемым сервером.
srt_proxy_timeout
- синтаксис:
srt_proxy_timeout timeout; - по умолчанию:
10m - контекст:
srt, server
Устанавливает тайм-аут между двумя последовательными операциями чтения или записи на соединениях с клиентом или проксируемым сервером. Если данные не передаются в течение этого времени, соединение закрывается.
srt_proxy_buffer_size
- синтаксис:
srt_proxy_buffer_size size; - по умолчанию:
64k - контекст:
srt, server
Устанавливает размер буфера, используемого для чтения данных с проксируемого сервера.
srt_proxy_stream_id
- синтаксис:
srt_proxy_stream_id expr; - по умолчанию: ``
- контекст:
srt, server
Устанавливает идентификатор потока SRT, смотрите документацию libsrt по опции SRTO_STREAMID для получения дополнительных сведений.
Значение параметра может содержать переменные.
srt_proxy_passphrase
- синтаксис:
srt_proxy_passphrase expr; - по умолчанию: ``
- контекст:
srt, server
Устанавливает пароль для шифрования, смотрите документацию libsrt по опции SRTO_PASSPHRASE для получения дополнительных сведений.
Значение параметра может содержать переменные.
Встроенные переменные
Ядро
binary_remote_addr- адрес клиента в двоичном формате, длина значения всегда 4 байта для IPv4 адресов или 16 байт для IPv6 адресовbytes_received- количество байт, полученных от клиентаbytes_sent- количество байт, отправленных клиентуconnection- серийный номер соединенияhostname- имя хостаmsec- текущее время в секундах с разрешением до миллисекундnginx_version- версия nginxpeer_version- версия libsrt удаленного пира, смотрите документацию libsrt по опцииSRTO_PEERVERSIONдля получения дополнительных сведений.pid- PID рабочего процессаprotocol- протокол, используемый для связи с клиентом, всегда равенSRTremote_addr- адрес клиентаremote_port- порт клиентаserver_addr- адрес сервера, который принял соединениеserver_port- порт сервера, который принял соединениеsession_time- продолжительность сессии в секундах с разрешением до миллисекундstatus- статус сессииstream_id- идентификатор потока SRT, смотрите документацию libsrt по опцииSRTO_STREAMIDдля получения дополнительных сведений.time_iso8601- местное время в формате ISO 8601time_local- местное время в формате общего журнала
Восходящий поток
upstream_addr- IP-адрес и порт восходящего сервераupstream_bytes_received- количество байт, полученных от восходящего сервераupstream_bytes_sent- количество байт, отправленных на восходящий серверupstream_connect_time- время подключения к восходящему серверу в секундах с разрешением до миллисекундupstream_first_byte_time- время получения первого байта данных в секундах с разрешением до миллисекундupstream_session_time- продолжительность сессии в секундах с разрешением до миллисекунд
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-srt.