Назад | Перейти на главную страницу

Обратный прокси NGINX, поток Config Video (MJPG) для использования одного подключения к внутреннему серверу

У меня есть вопрос / проблема с погодой, можно ли настроить обратный прокси NGINX, чтобы он не проксировал каждый запрос видеопотока на внутренний сервер, а вместо этого открывал одно соединение для получения видеопотока и его распространения среди клиентов. Сейчас я использую следующую конфигурацию.

server {                                                                        
      listen 9000 ssl;                                                              
      server_name some.domain www.some.domain;                                        
      error_log /var/log/nginx/error.cam.log;                                       
      access_log /var/log/nginx/access.cam.log;                                     
                                                                                
      ssl on;                                                                         
      ssl_certificate /etc/letsencrypt/live/some.domain/fullchain.pem;        
      ssl_certificate_key /etc/letsencrypt/live/some.domain/privkey.pem;       
                                                                                
      location / {                                                              
                                                                                
        auth_basic "Login";                                       
        auth_basic_user_file /etc/nginx/auth/Somefile;   
        proxy_pass http://XXX.XXX.XXX.XXX:9000/;                                  
        proxy_http_version 1.1;                                                 
        proxy_buffering off;        
                                                                                                                
      }                                                                                                                                                                                                                                
}  

    

Это приводит к новому бэкэнд-соединению с NGINX с одним и тем же видеопотоком каждый раз, когда клиент запрашивает этот сайт с сервера NGINX. На графике выше показан исходящий сетевой трафик: зеленый = сервер Nginx и синий = внутренний сервер. Каждый пик означает, что новый клиент получает доступ к потоку Video MJPG.

Итак, проблема в том, что у меня очень ограниченная производительность от бэкэнда до прокси NGINX, потому что бэкэнд - это Raspberry Pi, который не может обеспечить стабильный поток более 30 Мбит. Я уже экспериментировал с буферизацией и т.д., но безуспешно. Есть ли способ использовать одно соединение с серверной частью?

Спасибо и привет из Германии, Фло

Nginx всегда будет создавать новое прокси-соединение для входящего соединения, если оно не кешируется локально. Поскольку MJPG представляет собой бесконечный цикл, это не вариант.

Однако я бы попробовал настроить ffmpeg / vlc на прокси-сервере для использования потока mjpg из rpi. Затем Nginx может подключиться к локальному ffmpeg / vlc для получения потока. Тогда у вас будет только одно соединение с внутренним сервером.

Как ответил @Yarik, в настоящее время это невозможно из-за того, как Nginx обрабатывает прокси. Вам нужна какая-то система, которая предназначена для приема одного потока и может ретранслировать его любому количеству клиентов.

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