Nginx

NGINX 反向代理,配置影片(MJPG)流以使用單個連接到後端伺服器

  • March 24, 2020

我有一個問題/問題天氣,可以配置 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=藍色 上圖顯示了傳出網路流量:Green=Nginx Server 和 Blue=Backend Server。每個 Peak 都意味著訪問 Video MJPG 流的新客戶端。

所以問題是我從後端到 NGINX 代理的性能非常有限,因為後端是一個 Raspberry Pi,它不能提供超過 30Mbit 的穩定流。我已經嘗試過緩衝等,但沒有成功。有什麼方法可以使用單個連接到後端嗎?

來自德國的感謝和問候,弗洛

Nginx 將始終為傳入連接創建新的代理連接,除非它被本地記憶體。由於 MJPG 是一個無限循環,因此這裡似乎不是一個選項。

然而,我會嘗試在代理伺服器上設置一個 ffmpeg/vlc 以使用來自 rpi 的 mjpg 流。Nginx 然後可以連接到本地 ffmpeg/vlc 來獲取流。然後,您將只有一個與後端伺服器的連接。

正如@Yarik 已經回答的那樣,目前 Nginx 如何處理代理是不可能的。您需要一些系統,該系統旨在獲取一個流,並且可以將其轉播給許多客戶想要的任何內容。

還有一些其他項目旨在填補這一空白。您總是可以在同一台伺服器上的 Nginx 後面執行其中一個。Nginx 仍然會看到每個客戶端的單獨連接,並將這些連接轉發給廣播公司,但廣播公司只會用一個客戶端載入相機。

引用自:https://serverfault.com/questions/788173