У меня есть вопрос / проблема с погодой, можно ли настроить обратный прокси 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 по-прежнему будет видеть отдельные соединения для каждого клиента и перенаправлять их вещательной компании, но вещательная компания будет загружать камеру только с одним клиентом.