Nginx
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 連接的新後端具有完全相同的影片流。 上圖顯示了傳出網路流量: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 仍然會看到每個客戶端的單獨連接,並將這些連接轉發給廣播公司,但廣播公司只會用一個客戶端載入相機。