NGINX 反向代理,配置视频(MJPG)流以使用与后端服务器的单一连接

NGINX 反向代理,配置视频(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=蓝色 上图显示了传出网络流量:绿色=Nginx 服务器,蓝色=后端服务器。每个峰值都意味着有新客户端访问视频 MJPG 流。

所以问题是我从后端到 NGINX 代理的性能非常有限,因为后端是 Raspberry Pi,无法提供超过 30Mbit 的稳定流。我已经尝试过缓冲等,但没有成功。有没有方法可以使用单个连接到后端?

来自德国的感谢和问候,Flo

答案1

Nginx 将始终为传入连接创建新的代理连接,除非它在本地缓存。由于 MJPG 是一个无限循环,因此它似乎不是一个选项。

不过,我会尝试在代理服务器上设置 ffmpeg/vlc 来使用来自 rpi 的 mjpg 流。然后 Nginx 可以连接到本地 ffmpeg/vlc 来获取流。然后您将只有一个与后端服务器的连接。

答案2

正如 @Yarik 所回答的,目前 Nginx 处理代理的方式无法实现这一点。您需要某种系统,专门用于接收一个流,并将其重新广播给任意数量的客户端。

还有一些其他项目旨在填补这一空白。您可以始终在同一台服务器上的 Nginx 后面运行其中一个项目。Nginx 仍将看到每个客户端的单独连接,并将其转发给广播公司,但广播公司只会使用一个客户端加载摄像头。

相关内容