Штатным веб-сервером для веб-интерфейса AVReg является Apache2.
При установке пакета avreg-site-common (часть виртуального пакета avreg-server-mysql или avreg-server-pgsql), необходимые пакеты Apache2 и конфигурация AVReg для Apache2 устанавливаются автоматически.
Однако, снапшоты JPEG и медиапотоки Motion JPEG и HLS(H264+AAC) транслирует в браузеры по протоколу http демон(ы) avregd, а не Apache2. *Кроме использования нескольких http портов (apache2 + avregd), такая конфигурация предоставляет прямой доступ браузеров к демонам avregd (http-only), что *достаточно неудобно и небезопасно в случае работы с AVReg из внешней сети Интернет*.
Использование альтернативного веб-сервера NGINX решает эту специфическую проблему и, кроме того, позволяет легко перейти на использование SSL(https), полностью или только для клиентов внешней сети Интернет.
Недостатком такого решения является невозможность одновременной трансляции на Webkit-based браузерах (Chrome, Chromium, Safari, последние MS EDGE) более 6 камер на одну страницу (раскладку, в контексте документации AVReg). Это связано с жестким хардкодным ограничением в 6 потоков на один origin (= host:port). Однако, использование одновременно Apache2 для работы с AVReg по http в локальной сети и NGINX по https в глобальной сети Интернет, минимизирует неудобство этого ограничения, по нашему мнению.
В данном руководстве будет рассмотрен вариант совместного использования Apache2 и NGINX на разных портах. Причём на обоих веб-серверах будет использован «Virtual HOST» вариант настройки, при которой доступ к веб-интерфейсу AVReg обеспечивается не по IP адресу, а по доменному или хост-имени сервера (ServerName).
Версии дистрибутива и пакетов приложений, используемых для примеров этого руководства:
URL доступа:
Примечание. Использование Alias-based (с префиксом пути
/avreg
в URL) конфигураций для
адресации по IP-адресу с префиксом пути »/avreg» также возможно.
Обратитесь к нам за советом, если вам нужно что-то похожее.
Следуйте инструкциям руководства »Вариант №1 - Virtual HOST»
Остановите Apache2, который является частью зависимостей пакета avreg-site, чтобы избежать коллизий по использованию дефолтных www-портов (tcp/80, tcp/443):
sudo service apache2 stop
Установите NGINX и PHP FastCGI process manager:
sudo apt install nginx php-fpm
Прежде всего, замените порт дефолтного сервера с 80 на 81 (можете выбрать любой другой). Для этого откройте в редакторе файл «default»
sudoedit /etc/nginx/sites-available/default
и замените 80 на 81:
server { listen 81 default_server; listen [::]:81 default_server;
Восстановите работу Apache2 на дефолтных портах:
sudo nginx -t && sudo nginx -s reload sudo service apache2 start
Создайте файл «avreg» в каталоге »/etc/nginx/sites-available/»:
sudoedit /etc/nginx/sites-available/avreg
и скопируйте в него приведённый ниже текст, заменив «avreg.host.name» на DNS или хост имя вашего сервера и включив SSL с самоподписанным сертификатом, который впоследствии вы замените на настоящий:
server { listen 81; listen [::]:81; # SSL configuration # listen 443 ssl; listen [::]:443 ssl; # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # include snippets/snakeoil.conf; server_name avreg.host.name; root /usr/share/avreg-site; index index.php; location / { try_files $uri $uri/ =404; } location /media/ { alias /var/spool/avreg/; } location ~ ^/port([0-9]+)/(.*) { proxy_pass http://127.0.0.1:$1/$2$is_args$args; include proxy_params; proxy_set_header X-Forwarded-Prefix /port$1; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php-fpm.sock; } }
Активируйте конфигурацию:
sudo ln -s /etc/nginx/sites-available/avreg /etc/nginx/sites-enabled/avreg sudo nginx -t && sudo nginx -s reload
Если у вас только один единственный процесс avregd на все камеры, то добавьте в «avreg.conf» в секцию параметров приложения «avreg-site» следующие параметры:
avreg-site { ... if-nginx { avregd-httpd = '$_SERVER[REQUEST_SCHEME]://$_SERVER[HTTP_HOST]/port874' } if-apache { avregd-httpd = 'http://$_SERVER[SERVER_NAME]:874' } }
Если вы используете профили, то в конфиг каждого профиля
добавьте подобные примеру выше параметры. Покажем на примере одного
профиля с именем «p7» и конфиг-файлом
/etc/avreg/profiles/p7
:
# Камеры с 70 по 79 devlist = 70-79 avregd { http-port = 891 rtsp-port = 8591 } avreg-site { if-nginx { avregd-httpd = '$_SERVER[REQUEST_SCHEME]://$_SERVER[HTTP_HOST]/port891' } if-apache { avregd-httpd = 'http://$_SERVER[SERVER_NAME]:891' } }
Примечание. Подробнее про профили avregd читайте в этом руководстве »Конфигурация AVReg для распределения нагрузки по нескольким процессорам многопроцессорных систем или ядрам многоядерных процессоров (SMP).».
Такая конфигурация позволила обеспечить гибкий и безопасный способы доступа к сервисам AVReg: