RTMP配信サーバを構築します。
年々、Debianバージョンや、nginxバージョンが更新されちょっとずつコマンドが変わったりするので、最新の構築方法メモです。
インストール操作は変わりませんが、パッケージ類がちょっと変わっています。
ここから導入用メディアをダウンロードして、インストールします。
wget http://nginx.org/download/nginx-1.14.1.tar.gz tar xzvf nginx-1.14.1.tar.gz
apt-get install git git clone https://github.com/arut/nginx-rtmp-module.git
apt-get install libpcre3-dev zlib1g-dev openssl libssl-dev make gcc cd nginx-1.14.1 /configure --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --add-module=../nginx-rtmp-module --with-debug --prefix=/usr/local/nginx --with-http_secure_link_module --user=www-data --group=www-data
apt-get install php php-cgi php-cli php-fpm
エンコードしたrtmpを受け付ける時に、パスワードなしで受け付けちゃうと攻撃を受けやすいので、ちょっとしたセキュリティをかけておきます。
cd /usr/local/nginx/html/
mkdir publishauth
cd publishauth/
cat auth.php
// www.server.com/auth.php?user=felix&pass=felixpassword
//check if querystrings exist or not
if(empty($_GET['user']) || empty($_GET['pass']))
{
//no querystrings or wrong syntax
echo "File not found.";
header('HTTP/1.0 404 Not Found');
exit(1);
}
else
{
//querystring exist
$username = $_GET['user'];
$password = $_GET['pass'];
}
$savedpassword = livepass;
$saveduser = liveuser;
//check pass and user string
if (strcmp($password,$savedpassword)==0 && strcmp($username,$saveduser)==0 )
{
echo "Password and Username OK! ";
}
else
{
echo "password or username wrong! ";
header('HTTP/1.0 404 Not Found'); //kein stream
}
?>
grep -v '^\s*#' /etc/nginx/nginx.conf |grep -v '^\s*
/usr/sbin/nginx nginxの終了 /usr/sbin/nginx -s stop 80ポートが動いているか # netstat -an |egrep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1935ポートが動いているか # netstat -an |egrep :1935 tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN
phpプロセスが動いているか # ps aux |egrep 'www-data' www-data 20970 0.0 0.1 222040 6176 ? S 09:18 0:00 php-fpm: pool www www-data 20971 0.0 0.1 222040 6176 ? S 09:18 0:00 php-fpm: pool www www-data 22127 0.0 0.0 40108 3920 ? S 09:46 0:00 nginx: worker process
vi /usr/local/nginx/html/phpinfo.php <?php phpinfo(); ?>
http://サーバIP/phpinfo.php にアクセス
アクセス数は測りたいのでダッシュボードを作成しとく。ローカルホストのHTMLにアクセスした場合にだけ表示する
server {
listen 8080;
server_name localhost;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet /stat.xsl;
}
location /stat.xsl {
root html;
}
}
stat.xmlファイルをhtmlフォルダにコピーしておく
root@ContentsSrv:/usr/local/nginx/html# cp /home/ubuntu/nginx-rtmp-module/stat.xsl .
統計情報が表示できるか確認
へアクセス
やっぱり最小限と言ってもntpは欠かせないでしょう。ログの時刻が狂ってると良く分からなくなりますから。
apt-get install ntp
昔はntpサーバのっせいもこってやっていたけど、最近はめんどくさいのでデフォルトでそのままです。(^^♪
# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
0.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
122.215.240.51 103.1.106.69 2 u - 64 1 25.037 -1.428 0.642
210.173.160.27 133.243.236.17 2 u 2 64 1 15.975 -1.068 0.084
*133.243.238.163 .NICT. 1 u 1 64 1 19.330 -0.592 0.479
133.167.77.169 131.113.192.40 2 u 2 64 1 16.325 -3.737 0.123
13.230.38.136 133.243.238.244 2 u 5 64 1 22.368 -5.032 0.349
210.173.160.87 133.243.236.17 2 u 1 64 1 22.684 -1.791 0.689
133.243.238.164 .NICT. 1 u 1 64 1 22.259 -4.058 0.649
117.102.176.202 131.113.192.40 2 u - 64 1 30.287 -5.214 0.780
129.250.35.250 249.224.99.213 2 u 1 64 1 10.667 -4.357 0.461
133.243.238.244 .NICT. 1 u 1 64 1 16.251 -1.884 0.214
122.215.240.52 103.1.106.69 2 u 2 64 1 18.007 -1.365 0.076
54.64.6.78 133.243.238.164 2 u 1 64 1 23.192 -7.118 0.365
# vi /etc/init.d/nginx
#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
test_nginx_config() {
if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then
return 0
else
$DAEMON -t $DAEMON_OPTS
return $?
fi
}
start() {
test_nginx_config
# Check if the ULIMIT is set in /etc/default/nginx
if [ -n "$ULIMIT" ]; then
# Set the ulimits
ulimit $ULIMIT
fi
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--retry 5 --exec $DAEMON -- $DAEMON_OPTS || true
}
stop() {
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--retry 5 --exec $DAEMON || true
}
case "$1" in
start)
echo -n "Starting $DESC: "
start
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
stop
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
stop
sleep 1
echo "$NAME."
start
;;
reload)
echo -n "Reloading $DESC configuration: "
test_nginx_config
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
configtest|testconfig)
echo -n "Testing $DESC configuration: "
if test_nginx_config; then
echo "$NAME."
else
exit $?
fi
;;
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2
exit 1
;;
esac
実行権限を与え
chmod 755 /etc/init.d/nginx
登録する
update-rc.d nginx defaults ちゃんと登録されているか確認 # ls /etc/rc2.d/ S01anacron S01console-setup.sh S01dbus S01nginx S01php7.0-fpm S01rsyslog S01speech-dispatcher S01wicd S01avahi-daemon S01cron S01lightdm S01ntp S01rsync S01saned S01ssh
このnginx環境にCMSを置きたいと思いまして、合わせて構築しました。
worker_processes 1; events { worker_connections 1024; } 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; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } } tmp { server { listen 1935; notify_method get; buflen 5s; drop_idle_publisher 5s; publish_notify on; wait_key on; wait_video on; sync 10ms; application translate { live on; on_publish http://localhost/publishauth/auth.php; #LANからの映像配信しか受け付けない allow publish 192.168.0.0/16; deny publish all; } } }
http://サーバIP/phpinfo.php にアクセス
アクセス数は測りたいのでダッシュボードを作成しとく。ローカルホストのHTMLにアクセスした場合にだけ表示する
stat.xmlファイルをhtmlフォルダにコピーしておく
統計情報が表示できるか確認
へアクセス
やっぱり最小限と言ってもntpは欠かせないでしょう。ログの時刻が狂ってると良く分からなくなりますから。
昔はntpサーバのっせいもこってやっていたけど、最近はめんどくさいのでデフォルトでそのままです。(^^♪
実行権限を与え
登録する
このnginx環境にCMSを置きたいと思いまして、合わせて構築しました。