Логирование запросов к бэкенду (PHP)
Часто возникает вопрос, какие именно параметры передает Flussonic Media Server к бэкенду авторизации.
Сами параметры описаны в статье про авторизацию.
Но как увидеть конкретные значения?
Конечно, это зависит от используемой технологии. Так как мы не можем описать все возможные языки программирования и операционные системы, в этой статье скрипт авторизации будет написан на языке PHP, а выполняться на операционной системе Ubuntu с помощью встроенного в PHP веб-сервера.
Установка PHP со встроенным веб-сервером
Встроенный веб-сервер не предназначен для работы в продакшене и может использоваться только для тестовых целей. Если вам нужно использовать этот скрипт не в тестовых целях, необходимо установить и настроить nginx, apache, fpm и т.п. Это сложно и долго, поэтому здесь этого процесса не описано.
Как сказано в документации PHP, встроенный веб-сервер доступен только начиная с версии 5.4.0.
К сожалению, такой новой версии может не оказаться среди доступных пакетов. В качестве примера, покажу как можно установить последний PHP на Ubuntu с помощью PPA. Нужно выполнить в командной строке следующие команды:
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:ondrej/php5-5.6
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install php5
Danger
если вы не доверяете репозиторию "ppa:ondrej/php5", то вам придется найти какой-то другой способ установить свежий PHP в свою систему. Мы (Эрливидео) не несем никакой ответственности за содержимое этого PPA.
Дальше нужно проверить, что PHP действительно установился.
В командной строке выполняем команду php -v
.
Пример правильного вывода:
PHP 5.5.16-1+deb.sury.org~trusty+1 (cli) (built: Aug 25 2014 10:24:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
Скрипт авторизации
Сохраните этот скрипт в любое удобное место на жестком диске.
Например, если пользователь, которого вы используете, называется flussonic
,
то можно сделать директорию /home/flussonic/phproot
и
положить туда файл с именем /home/flussonic/phproot/notify.php
.
В начале скрипта нужно отредактировать две настройки, LOG_FILE (сюда будет писать результат) и AUTH_DURATION (как часто Flussonic Media Server будет обращаться к бэкенду с новыми запросами).
<?php
/* ========== SETTINGS ========== */
$LOG_FILE = '/tmp/notify.log';
$AUTH_DURATION = '5';
/* ============================== */
function array_read($array, $seperator = ', ', $ending = ' and '){
$opt = count($array);
return $opt > 1 ? implode($seperator,array_slice($array,0,$opt-1)).$ending.end($array) : $array[0];
}
function logme($tolog) {
global $LOG_FILE;
$file = $LOG_FILE;
// Write the contents to the file,
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $tolog, FILE_APPEND | LOCK_EX);
}
function logmeln($tolog) {
logme($tolog."\n");
}
function detectRequestBody() {
$rawInput = fopen('php://input', 'r');
$tempStream = fopen('php://temp', 'r+');
stream_copy_to_stream($rawInput, $tempStream);
rewind($tempStream);
return $tempStream;
}
function getRequestBody() {
return file_get_contents('php://input');
}
function logRequest() {
global $AUTH_DURATION;
logmeln("===============");
logmeln("BEGIN LOG");
logmeln("===============");
logmeln("query_string");
logmeln(@$_SERVER['QUERY_STRING']);
logmeln("user agent");
logmeln(@$_SERVER['HTTP_USER_AGENT']);
logmeln("POST");
logmeln(print_r($_POST, true));
logmeln("GET");
logmeln(print_r($_GET, true));
logmeln("SERVER");
logmeln(print_r($_SERVER, true));
logmeln("REQUEST BODY");
logmeln(print_r(getRequestBody(), true));
logmeln("===============");
logmeln("END LOG");
logmeln("===============");
header("Status: 200");
header("HTTP/1.0 200 OK");
header("X-AuthDuration: ".$AUTH_DURATION);
}
logRequest();
?>
Запуск встроенного веб-сервера
Допустим, вы сохранили скрипт в файл /home/flussonic/phproot/notify.php
Тогда нужно в командной строке выполнить следующее:
cd /home/flussonic/phproot
php -S localhost:8000
При нормальном запуске сервер должен ответить:
PHP 5.5.16-1+deb.sury.org~trusty+1 Development Server started at Thu Sep 25 20:55:15 2014
Listening on http://localhost:8000
Document root is /home/flussonic/phproot
Press Ctrl-C to quit.
Теперь все запросы к URL http://localhost:8000/notify.php
будут логироваться в файл /tmp/notify.log
.
Включение авторизации во Flussonic Media Server
Добавьте в файл конфигурации ваш статический поток, указав в качестве аргумента директивы auth url, который обслуживается встроенным сервером (http://localhost:8000/notify.php
).
stream myvideo {
input tshttp://videoserver/videostream;
on_play http://localhost:8000/notify.php;
}
Примените изменение файла конфигурации service flussonic reload
.
Проверка результатов
Войдите в веб-интерфейс Flussonic Media Server и попробуйте посмотреть видео прямо из веб-интерфейса.
В это время в соответствующем файле (например, в /tmp/notify.log
) должны начать появляться новые записи с информацией о запросах.
Появление новых записей удобно наблюдать в консоли с помощью команды tail: tail -f /tmp/notify.log
.