Видеонаблюдение через интернет в веб-браузере

Использование веб-сервера NGINX для AVReg

Штатным веб-сервером для веб-интерфейса 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).

Версии дистрибутива и пакетов приложений, используемых для примеров этого руководства:

  • Debian GNU/Linux 10 (Buster)
  • avreg-site-common >= 6.3p14 (!!!)
  • apache2 2.4.38
  • nginx 1.14.2-2
  • php-fpm 2:7.3

URL доступа:

Примечание. Использование Alias-based (с префиксом пути /avreg в URL) конфигураций для адресации по IP-адресу с префиксом пути »/avreg» также возможно. Обратитесь к нам за советом, если вам нужно что-то похожее.

Настройка Virtual Host AVReg для Apache2

Следуйте инструкциям руководства »Вариант №1 - Virtual HOST»

Установка веб-сервера NGINX

Остановите 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

Virtual HOST конфигурация NGINX

Создайте файл «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/php7.3-fpm.sock;
    }
}

Активируйте конфигурацию:

  sudo ln -s /etc/nginx/sites-available/avreg /etc/nginx/sites-enabled/avreg
  sudo nginx -t && sudo nginx -s reload

Изменения AVReg

Если у вас только один единственный процесс 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:

  • http://avreg.host.name/ - для локальной сети (Apache2), с обходом браузерных ограничений на количество просматриваемых камер на одной странице (раскладке);
  • https://avreg.host.name/ - для доступа из Интернет (через Nginx), через единственный HTTPS порт, с ограничением одновременно просматриваемых камер до 6 (для Webkit-based браузеров), что для доступа через Интернет обычно достаточно.
manual/applications/nginx-avreg-virtualhost-proxy-ssl.txt · Последние изменения: 2019-12-06