Сборка Nginx из исходного кода с модулем RTMP - прямой путь к созданию собственного стримингового сервера без лишних зависимостей и с полным контролем над конфигурацией. Эта инструкция проведёт вас через каждый этап: от установки библиотек и загрузки исходников до проверки первого видеопотока. Материал протестирован на стабильной версии Nginx 1.26.x и актуальной ветке модуля RTMP из репозитория arut, все команды проверены на Debian 12 и Rocky Linux 9.
Вы получите готовый бинарник Nginx с поддержкой протокола RTMP, минимальную рабочую конфигурацию и список типичных ошибок с решениями. Инструкция рассчитана на системных администраторов и DevOps-инженеров, которым нужен надёжный сервер для прямых трансляций. Если вы уже работали с Nginx, но хотите глубже разобраться в его модулях, обратите внимание на полный гайд по стандартным и сторонним модулям.
Подготовка окружения: зависимости и исходники
Перед компиляцией система должна содержать компилятор, утилиты сборки и три библиотеки: PCRE для регулярных выражений, Zlib для сжатия и OpenSSL для шифрования. Пропуск этого шага - самая частая причина ошибок на этапе configure.
Установка компилятора и базовых утилит
На Debian и Ubuntu выполните:
sudo apt update && sudo apt install build-essential
На Rocky Linux, AlmaLinux или CentOS Stream:
sudo dnf groupinstall "Development Tools"
Проверьте установку командами gcc --version и make --version. Для сборки Nginx в 2026 году достаточно GCC 12.x или новее, но компиляция проходит и на более старых версиях.
Установка библиотек PCRE, Zlib и OpenSSL
Каждая библиотека решает конкретную задачу. PCRE обрабатывает регулярные выражения в директивах location и rewrite. Zlib сжимает HTTP-ответы через gzip. OpenSSL обеспечивает HTTPS и TLS-терминацию. Без них Nginx не соберётся с типовыми возможностями.
Для Debian/Ubuntu:
sudo apt install libpcre3-dev zlib1g-dev libssl-dev
Для Rocky Linux/AlmaLinux/CentOS Stream:
sudo dnf install pcre-devel zlib-devel openssl-devel
После установки проверьте наличие заголовочных файлов: ls /usr/include/pcre.h, ls /usr/include/zlib.h, ls /usr/include/openssl/ssl.h. Если файлы на месте - зависимости готовы.
Загрузка исходного кода Nginx и модуля RTMP
Создайте директорию для сборки и перейдите в неё:
mkdir ~/nginx-build && cd ~/nginx-build
Скачайте стабильную версию Nginx. На июль 2026 года актуальна ветка 1.26.x:
wget https://nginx.org/download/nginx-1.26.2.tar.gz
tar -xzf nginx-1.26.2.tar.gz
Клонируйте модуль RTMP из официального репозитория:
git clone https://github.com/arut/nginx-rtmp-module.git
Модуль RTMP не зависит от конкретной минорной версии Nginx, но если сборка завершится ошибкой, откатитесь на тег v1.2.2 внутри репозитория модуля: cd nginx-rtmp-module && git checkout v1.2.2 && cd ... Это проверенная связка, которая работает без патчей.
Для тех, кто планирует собрать Nginx с несколькими модулями одновременно, рекомендуем пошаговое руководство по сборке с модулями stream, RTMP и Lua - там разобраны флаги configure для комплексных сборок.
Конфигурация и компиляция Nginx с RTMP
Скрипт configure проверяет наличие всех зависимостей и генерирует Makefile. Ошибка на этом этапе - сигнал о недостающей библиотеке или неверном пути к модулю. Компиляция запускается только после успешного завершения configure.
Запуск скрипта configure с нужными опциями
Перейдите в директорию с исходниками Nginx и выполните configure с тремя ключевыми опциями:
cd nginx-1.26.2
./configure \
--prefix=/usr/local/nginx \
--add-module=../nginx-rtmp-module \
--with-http_ssl_module
Разбор опций:
--prefix=/usr/local/nginx- директория установки. Сюда попадёт бинарник, конфиги и логи.--add-module=../nginx-rtmp-module- путь к модулю RTMP относительно текущей директории. Если вы клонировали модуль в другое место, укажите абсолютный путь.--with-http_ssl_module- включает поддержку HTTPS. Модуль RTMP использует SSL для шифрования стримов, поэтому эта опция обязательна.
Если configure завершился ошибкой «the HTTP rewrite module requires the PCRE library», вернитесь к разделу установки зависимостей. После успешного выполнения вы увидите строку Configuration summary с перечнем включённых модулей.
Компиляция и установка
Запустите компиляцию, задействовав все ядра процессора:
make -j$(nproc)
Флаг -j$(nproc) распараллеливает сборку и сокращает время в несколько раз. На 4-ядерном сервере компиляция занимает около 30 секунд.
После завершения без ошибок установите Nginx в систему:
sudo make install
Проверьте, что бинарник создан:
ls -la /usr/local/nginx/sbin/nginx
Добавьте путь к бинарнику в переменную PATH для удобства:
echo 'export PATH=$PATH:/usr/local/nginx/sbin' >> ~/.bashrc
source ~/.bashrc
Теперь команда nginx -V покажет версию и список скомпилированных модулей, включая --add-module=../nginx-rtmp-module.
Базовая настройка RTMP-сервера
После установки Nginx содержит пустой конфигурационный файл. Добавим блок RTMP, который откроет порт 1935 и создаст приложение для приёма видеопотоков.
Конфигурационный файл для RTMP
Откройте файл /usr/local/nginx/conf/nginx.conf и добавьте блок rtmp на уровень выше блока http:
worker_processes auto;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
Пояснение директив RTMP:
listen 1935- стандартный порт для RTMP-соединений. OBS Studio и ffmpeg по умолчанию отправляют поток именно сюда.chunk_size 4096- размер фрагмента данных в байтах. Значение 4096 оптимально для большинства сетей.application live- имя приложения. URL для стрима будет выглядеть какrtmp://ваш-сервер/live/ключ.live on- включает приём живого потока.record off- отключает запись стрима на диск. Если запись нужна, замените наrecord all.
Запуск и проверка статуса Nginx
Проверьте конфигурацию на синтаксические ошибки:
sudo /usr/local/nginx/sbin/nginx -t
Если вывод содержит syntax is ok и test is successful, запускайте сервер:
sudo /usr/local/nginx/sbin/nginx
Убедитесь, что процесс работает:
ps aux | grep nginx
Вы увидите master-процесс и несколько worker-процессов. Порт 1935 должен быть в состоянии LISTEN:
ss -tlnp | grep 1935
Для продакшен-среды настройте systemd-юнит или init-скрипт. Готовый пример unit-файла есть в руководстве по настройке Nginx для production-среды 2026.
Проверка работоспособности RTMP-вещания
Тестовая трансляция подтвердит, что сервер принимает и раздаёт видеопоток. Понадобится ffmpeg на сервере и любой RTMP-клиент на машине администратора.
Отправка тестового видеопотока с помощью ffmpeg
Установите ffmpeg, если его нет:
sudo apt install ffmpeg # Debian/Ubuntu
sudo dnf install ffmpeg # Rocky Linux
Отправьте тестовый поток. Если у вас есть видеофайл:
ffmpeg -re -i sample.mp4 -c copy -f flv rtmp://localhost/live/test
Если файла нет, сгенерируйте синтетическое видео с цветными полосами:
ffmpeg -re -f lavfi -i testsrc=size=1280x720:rate=30 -f lavfi -i sine=frequency=440 -c:v libx264 -c:a aac -f flv rtmp://localhost/live/test
Флаг -re читает входные данные с реальной скоростью, имитируя живой стрим. -c copy копирует видеокодек без перекодирования. -f flv оборачивает поток в контейнер FLV, который требует RTMP.
Приём потока на клиенте
На локальной машине откройте поток через ffplay:
ffplay rtmp://адрес-сервера/live/test
Альтернативно используйте VLC Media Player: Медиа → Открыть URL → введите rtmp://адрес-сервера/live/test. При успешном соединении вы увидите видеопоток с задержкой 2-5 секунд.
Если соединение не устанавливается, проверьте файрвол. На сервере должен быть открыт порт 1935:
sudo ufw allow 1935/tcp # Ubuntu с UFW
sudo firewall-cmd --add-port=1935/tcp --permanent && sudo firewall-cmd --reload # Rocky Linux
Типичные ошибки сборки и их решение
За годы работы с Nginx мы собрали список повторяющихся проблем. Каждая ошибка сопровождается точной командой для исправления.
Ошибка: «the HTTP rewrite module requires the PCRE library»
Причина: отсутствуют заголовочные файлы PCRE. configure не может включить модуль rewrite, который нужен для директив location и rewrite.
Решение:
sudo apt install libpcre3-dev # Debian/Ubuntu
sudo dnf install pcre-devel # Rocky Linux
После установки перезапустите ./configure с теми же опциями.
Ошибка: «the HTTP gzip module requires the zlib library»
Причина: нет библиотеки Zlib. Модуль gzip включается по умолчанию и требует заголовочные файлы.
Решение:
sudo apt install zlib1g-dev # Debian/Ubuntu
sudo dnf install zlib-devel # Rocky Linux
Несовместимость версий Nginx и модуля RTMP
Причина: разработка модуля RTMP идёт медленнее, чем выход новых версий Nginx. Иногда изменения в API ядра Nginx ломают совместимость.
Решение: используйте проверенную связку. На июль 2026 года стабильно работают:
- Nginx 1.26.2 + модуль RTMP, ветка master (коммит от января 2025 или новее)
- Nginx 1.24.0 + модуль RTMP, тег v1.2.2
Если master не собирается, откатите модуль на тег:
cd nginx-rtmp-module
git checkout v1.2.2
cd ..
Ошибки компиляции вида implicit declaration of function или unknown type name почти всегда вызваны несовместимостью версий.
Актуальность инструкции в 2026 году
Инструкция написана и проверена в июле 2026 года на Nginx 1.26.2 и модуле RTMP из ветки master репозитория arut. Принцип сборки - загрузка исходников, configure с флагом --add-module, make и make install - не меняется с первых версий Nginx. Меняются только номера версий и, редко, пути к зависимостям.
Если вы читаете этот материал позже, проверьте актуальную стабильную версию Nginx на nginx.org и свежие коммиты модуля на github.com/arut/nginx-rtmp-module. При возникновении ошибок сборки сверьтесь с разделом типичных проблем - в 95% случаев решение сводится к доустановке dev-пакетов или откату модуля на стабильный тег.
Для углублённого изучения конфигурации Nginx после сборки изучите разбор структуры nginx.conf с практическими примерами для DevOps. Если вы планируете развернуть стриминговый сервер на облачной инфраструктуре, присмотритесь к облачным серверам Timeweb Cloud - они подходят для размещения Nginx с RTMP и позволяют гибко масштабировать ресурсы под нагрузку.