В этой заметке пойдет речь о том, как настроить nginx-rtmp-module на сервере, чтобы в итоге использовать его для того, чтобы организовать вещание потокового видео на любом ресурсе или сайте.
В процессе установки я натыкался на различные подводные камни, поэтому попробую все нюансы описать детально.
Вводные данные: VDS на Ubuntu 16.04 LTS (на 18.04 тоже работает)
Итак, приступим.
Подготовка системы к установке компонентов
Для начала обновим систему и возможные модули:
sudo apt-get update
sudo apt-get upgrade
После этого, можно проверить, установлен ли у вас nginx (на некоторых VDS он уже предустановлен) командой
nginx -v
Установка nginx
Если же после этого вы увидели информацию о версии, то идем дальше, иначе устанавливаем его со всемы дополнительными пакетами:
apt-get install nginx libpcre++-dev libssl-dev libxslt1-dev libgd2-xpm-dev libgeoip-dev
или же просто
sudo apt-get install nginx
Командой nginx -v проверяем текущую версию nginx и запонимаем ее. У меня это версия 1.10.3.
Сборка nginx из исходников с модулем nginx-rtmp-module
Далее будем собирать nginx из исходников с модулем nginx-rtmp-module. Скачиваем nginx необходимой версии
wget http://nginx.org/download/nginx-1.10.3.tar.gz
Скачиваем nginx-rtmp-module:
wget https://github.com/arut/nginx-rtmp-module/archive/master.tar.gz
Теперь распакуем оба архива:
tar xzf nginx-1.10.3.tar.gz
tar xzf master.tar.gz
Отлично! Можно приступать к сборку nginx из исходников. Переходим в папку с nginx 1.10.3 и выполняем следующее:
cd nginx-1.10.3
nginx -V
Только что мы запросиили установочную конфигурацию nginx, который будем компилировать. Вывод может быть примерно такой:
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2'
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
--prefix=/usr/share/nginx
--conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock
--pid-path=/run/nginx.pid
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--with-debug
--with-pcre-jit
--with-ipv6
--with-http_ssl_module
--with-http_stub_status_module
--with-http_realip_module
--with-http_auth_request_module
--with-http_addition_module
--with-http_dav_module
--with-http_geoip_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_image_filter_module
--with-http_v2_module
--with-http_sub_module
--with-http_xslt_module
--with-stream
--with-stream_ssl_module
--with-mail
--with-mail_ssl_module
--with-threads
Далее нам нужно в конец строки добавить путь до нашего nginx-rtmp-module:
--add-module=../nginx-rtmp-module-master
Итог (нужно убрать переносы, чтобы была строка, либо добавить обратный слеш как символ переноса, я просто отформатировал для наглядности). Запускаем ./connfigure
./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2'
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
--prefix=/usr/share/nginx
--conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock
--pid-path=/run/nginx.pid
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--with-debug
--with-pcre-jit
--with-ipv6
--with-http_ssl_module
--with-http_stub_status_module
--with-http_realip_module
--with-http_auth_request_module
--with-http_addition_module
--with-http_dav_module
--with-http_geoip_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_image_filter_module
--with-http_v2_module
--with-http_sub_module
--with-http_xslt_module
--with-stream
--with-stream_ssl_module
--with-mail
--with-mail_ssl_module
--with-threads
--add-module=../nginx-rtmp-module-master
И далее делаем:
make
make install
Возможные ошибки в процессе установки и компиляции
Вот как раз на этом этапе может возникнуть ошибка потипу:
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c: In function 'ngx_rtmp_stat_handler':
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c:771:63: error: missing terminating " character [-Werror]
NGX_RTMP_STAT_L("<built> __DATE__ __TIME__ "</built>\r\n");
^
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c:863:0: error: unterminated argument list invoking macro "NGX_RTMP_STAT_L"
}
^
../nginx-rtmp-module-master/ngx_rtmp_stat_module.c:771:5: error: 'NGX_RTMP_STAT_L' undeclared (first use in this function)
NGX_RTMP_STAT_L("<built> __DATE__ __TIME__ "</built>\r\n");
Чтобы это исправить, достаточно убрать из параметра --with-cc-opt опцию -Wdate-time. Однако, правильнее всего быдет почистить скомпилированное:
sudo make clean
rm -rf Makefile objs
Затем заново запустить ./configure, make (должно скомпилироваться без ошибок) и make install.
Ну и на последок, если не завелось - скопируйте это
cp /usr/share/nginx/sbin/nginx /usr/sbin/nginx