Установка и настройка Nginx с модулем RTMP на CentOS 7

Кратко
В этом руководстве показано, как собрать, установить и настроить Nginx с модулем nginx-rtmp на сервере CentOS 7 для живой трансляции (RTMP/HLS) и видео по запросу (VOD). Вы получите рабочий поток: сборка из исходников, служба systemd, конфигурация RTMP/HLS, тесты через VLC и OBS. Включены рекомендации по безопасности, проверке и альтернативные варианты развёртывания.
Введение
RTMP (Real Time Messaging Protocol) — высокопроизводительный протокол для передачи данных, аудио и видео по сети, исторически связанный с Flash и используемый для стриминга в реальном времени. Модуль nginx-rtmp расширяет Nginx возможностями приема RTMP-потоков, подготовки HLS и поддержки VOD.
Этот материал шаг за шагом показывает установку из исходников на CentOS 7, настройку службы systemd, базовую конфигурацию RTMP/HLS, организацию VOD, тестирование с VLC и OBS, а также практические рекомендации по безопасности, отказоустойчивости и проверке работоспособности.
Важно: инструкция предполагает работу под root или эквивалентными правами. Следуйте корпоративным политикам по безопасности при открытии портов и хранении медиа.
Основные требования
- Сервер с CentOS 7
- Root-привилегии или sudo
- Доступ в интернет для загрузки исходников
Что будет сделано
- Установка зависимостей
- Загрузка исходников Nginx и модулей (pcre, zlib, OpenSSL, nginx-rtmp)
- Компиляция Nginx с модулем RTMP
- Создание systemd unit для Nginx
- Конфигурация nginx.conf с RTMP и HLS
- Настройка VOD и live-приложений
- Тестирование через VLC и OBS
Преимущества и ограничения
Преимущества:
- Полный контроль над сборкой (опции, модули, отладка).
- Малые накладные расходы, производительный потоковый сервер.
- Поддержка RTMP, HLS, MPEG-DASH (через дополнительные модули).
Ограничения:
- Поддержка RTMP требует сборки из исходников, если вам нужен нестандартный набор модулей.
- Для масштабирования реального времени потребуется балансировка и распределённое хранение сегментов HLS.
Факто-бокс: ключевые настройки
- Порт RTMP: 1935
- Порт HTTP для HLS по умолчанию в примере: 8080
- Путь HLS в примере: /mnt/hls/
- Путь VOD (mp4): /mnt/mp4s
Шаг 1 — установка зависимостей
Устанавливаем инструменты сборки и зависимости. В примерах используются команды для CentOS 7.
sudo yum -y groupinstall 'Development Tools'Добавляем репозиторий EPEL:
sudo yum -y install epel-releaseУстанавливаем дополнительные пакеты:
sudo yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-develОжидайте завершения установки всех пакетов.

Шаг 2 — загрузка исходников Nginx и модуля RTMP
Работаем в каталоге /usr/local/src:
cd /usr/local/srcЗагружаем Nginx 1.14.0 и распаковываем:
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gzЗагружаем и распаковываем pcre, zlib, OpenSSL:
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
unzip pcre-8.42.zip
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gzКлонируем nginx-rtmp-module:
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.gitОчищаем архивы:
rm -f *.tar.gz *.zipПроверяем каталоги:
ls -lah
Шаг 3 — компиляция и установка Nginx с модулем RTMP
Переходим в каталог исходников и конфигурируем сборку с набором опций и подключением модулей:
cd nginx-1.14.0/Запускаем configure с параметрами (копируйте и используйте как есть):
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--builddir=nginx-1.14.0 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.42 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0h \
--with-openssl-opt=no-nextprotoneg \
--add-module=../nginx-rtmp-module \
--with-debugСобираем и устанавливаем:
sudo make
sudo make installДалее создаём символьную ссылку на папку модулей, пользователя nginx и кэш-директорию:
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx
mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/Проверяем конфигурацию и версию Nginx:
nginx -t
nginx -V
Шаг 4 — запуск Nginx как systemd-сервиса
Создаём unit-файл systemd для управления сервисом.
cd /lib/systemd/system/
vim nginx.serviceВставьте следующий блок и сохраните файл:
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.targetПрименяем изменения systemd и запускаем сервис:
systemctl daemon-reload
systemctl start nginx
systemctl enable nginxСервер Nginx теперь работает как служба systemd.

Шаг 5 — конфигурация модуля Nginx RTMP
Делаем резервную копию оригинального nginx.conf и создаём собственный конфиг.
cd /etc/nginx/
mv nginx.conf nginx.conf.asli
vim nginx.confВставьте конфигурацию RTMP + HTTP (HLS):
worker_processes auto;
events {
worker_connections 1024;
}
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# Define the Application
application show {
live on;
# Turn on HLS
hls on;
hls_path /mnt/hls/;
hls_fragment 3;
hls_playlist_length 60;
# disable consuming the stream from nginx as rtmp
deny play all;
}
}
}
http {
sendfile off;
tcp_nopush on;
aio on;
directio 512;
default_type application/octet-stream;
server {
listen 8080;
location / {
# Disable cache
add_header 'Cache-Control' 'no-cache';
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/dash+xml mpd;
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt/;
}
}
}Сохраняем и создаём директорию для HLS, назначаем владельца:
mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hlsПроверяем конфигурацию и перезапускаем сервис:
nginx -t
systemctl restart nginx
Шаг 6 — настройка первого live-потока и VOD
Добавим в секцию rtmp дополнительные приложения для VOD и live. Откройте /etc/nginx/nginx.conf и измените/дополните блок rtmp:
# RTMP video on demand for mp4 files
application vod {
play /mnt/mp4s;
}
# RTMP stream using OBS
application stream {
live on;
}Создаём каталог для mp4 и назначаем владельца:
mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4sПроверяем и перезапускаем Nginx:
nginx -t
systemctl restart nginxТеперь у вас есть:
- VOD: rtmp://
:1935/vod/ - Live (приём от OBS): rtmp://
:1935/stream/

Шаг 7 — тестирование
Тест VOD в VLC
- Откройте VLC.
- Меню “Файл” → “Открыть сеть” (Open Network).
- Введите URL VOD: rtmp://192.168.1.10:1935/vod/file.mp4
- Нажмите “Открыть”.

Результат: видео воспроизводится в медиаплеере.

Тест live-потока через OBS + VLC
- В OBS настройте поток: тип сервера = Custom, URL = rtmp://192.168.1.10:1935/stream, Stream Key — по желанию.
- Начните трансляцию в OBS.
- В VLC откройте сеть и введите rtmp://192.168.1.10:1935/stream/

Если всё настроено верно, VLC начнёт получать поток.


Безопасность и жёсткая настройка
- Ограничьте доступ к RTMP-порту (1935) через firewall, разрешая только доверенные IP.
- Настройте authentication/ключи на стороне приложения (например, проверка ключа в URL или внешняя HTTP-аутентификация через on_publish/on_play callbacks).
- Храните HLS/MP4 в защищённых разделах с корректными правами, периодически очищайте временные файлы.
- Отключите ненужные модули в сборке для уменьшения поверхности атаки.
- Используйте HTTPS/TLS (сборка с OpenSSL) для защиты управления и HLS-over-HTTPS.
Пример iptables (простой):
# Разрешить доступ к RTMP только из подсети 10.0.0.0/24
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="1935" accept'
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reloadАльтернативные подходы
- Установить предварительно собранный пакет nginx с уже включённым модулем (например, nginx-extras в других дистрибутивах) — быстрее, но дает меньше контроля.
- Использовать специализированные потоковые продукты (Wowza, Red5, Flussonic) — больше фич, коммерческая поддержка, но выше стоимость.
- Запустить nginx с RTMP в контейнере (Docker) — упрощает деплой и обновления, требует управления хранением сегментов HLS.
Мини-методология (шаблон действий)
- Подготовка сервера: обновление, установка зависимостей.
- Загрузка исходников и модулей.
- Конфигурация сборки в соответствии с требованиями безопасности и функциональности.
- Сборка, установка, проверка bin и модулей.
- Создание systemd unit и настройка автозапуска.
- Настройка RTMP/HLS/VOD, права на каталоги.
- Тестирование клиентами (VLC, OBS), мониторинг логов.
- Жёсткая настройка firewall и механизмов аутентификации.
Чек-листы по ролям
Администратор сервера:
- Обновить OS и установить зависимости.
- Настроить firewall и SELinux (при использовании).
- Создать пользователя nginx и задать права файлов.
- Настроить systemd unit и мониторинг.
Инженер стриминга / оператор:
- Настроить OBS/Encoder на передачу в rtmp://
/stream. - Проверить HLS-плейлист и сегменты в /mnt/hls.
- Загружать mp4 в /mnt/mp4s и проверять VOD-поток.
DevOps / CI:
- Автоматизировать сборку и деплой конфигураций.
- Настроить бэкапы конфигов и ротацию логов.
- Включить алерты на ошибочные публ и on_publish failures.
Критерии приёмки
- Nginx запущен как служба systemd и автозапуск включён.
- Приём RTMP-потоков на порт 1935 работает.
- HLS-плейлисты генерируются в /mnt/hls и доступны по HTTP.
- VOD mp4 воспроизводится через rtmp://
:1935/vod/ в VLC. - Live-поток из OBS виден в VLC.
- Firewall настроен и доступ ограничен по политике.
Тестовые случаи и проверка
- Положительный: отправить тестовый поток с OBS → ожидать видимость в VLC.
- Верификация VOD: поместить test.mp4 в /mnt/mp4s → воспроизвести rtmp://…/vod/test.mp4.
- Негативный: попытка воспроизвести несуществующий файл → корректный код ошибки и запись в лог.
- Security: попытка подключения с незадекларированного IP (если firewall настроен) → должно блокироваться.
Отказ и откат
- Если после сборки Nginx не запускается: восстановите nginx.conf из nginx.conf.asli и запустите systemctl restart nginx.
- Если модуль RTMP вызывает критические ошибки, остановите сервис и проверьте журнал: journalctl -u nginx –no-pager.
Частые ошибки и решения
- Ошибка конфигурации nginx -t → внимательно проверьте синтаксис nginx.conf (особенно пути к каталогам и директивы rtmp).
- Проблемы с правами доступа к /mnt/hls или /mnt/mp4s → chown -R nginx:nginx <каталог>.
- Невидимый поток в VLC при OBS → проверить адрес сервера, firewall, и что OBS успешно устанавливает соединение (лог OBS).
Сопровождение и масштабирование
Для увеличения нагрузки:
- Используйте балансировщик (NGINX или специализированный LB) перед нодами приёма RTMP.
- Разделите хранение сегментов HLS на отдельные файловые серверы или CDN.
- Используйте репликацию/кэширование HLS для уменьшения нагрузки на origin.
Краткое резюме
Установка Nginx с модулем RTMP на CentOS 7 даёт гибкую платформу для собственной инфраструктуры стриминга. Собирая из исходников, вы получаете контроль над опциями и безопасность. После базовой настройки проверьте VOD и live-трансляции, ограничьте доступ и добавьте monitoring для стабильной эксплуатации.
Источники
Похожие материалы
Как сделать правый клик на Chromebook
Не удалось инициализировать Direct3D — решения
Исправить Data Retrieval в Diablo 4 на Steam
Open Graph в WordPress — настройка мета‑тегов
getconf: адаптивные скрипты для разных Linux