Nginx

複雜的 Nginx 虛擬主機配置

  • September 21, 2014

我嘗試了一整天來製作一個 nginx vhost 配置來滿足我的需求,但我一直都做錯了。這是我需要做的。

我有一個伺服器,我在其中流式傳輸電影和直播流。Movies & Streams 正在從 .php 文件重新流式傳輸。一切都很好。這 2 個文件是 stream_live.php 和 stream_movies.php

我想根據我將選擇的類型值使用不同的 fastcgi_ 設置。例如,對於直播,您可以選擇使用 mpegts 或 hls。我希望它作為 PHP 文件中的參數。現在我將舉例說明以便更好地理解它。

我希望每次使用者這樣請求:

http://domain.com/live/username/password/1.live?type=hls

使用參數使用者名、密碼、id 和類型(此處為 1 = id)在文件 stream_live.php 中重定向。我怎麼能這樣做?

對於電影,我想要一個類似的

http://domain.com/movies/username/password/1.movie

使用參數使用者名/密碼/ID(1 = ID)在文件 stream_movies 中重定向

一個小筆記!正如我上面所說,如果您請求電影或直播,我想使用不同的設置。

所以對於我想使用的電影

  • fastcgi_buffering 關閉;

對於我想使用的直播流

  • fastcgi_buffering 開啟; 除了type=hls我希望它fastcgi_buffering 關閉;

抱歉,我請求了整個 nginx 配置,但我嘗試了一整天來完成它,但我做不到。:(

謝謝

所以基本上你只想控制fastcgi_buffering基於類型參數的設置?閱讀精美的手冊並註意這部分:

也可以通過在“X-Accel-Buffering”響應頭欄位中傳遞“yes”或“no”來啟用或禁用緩衝。可以使用fastcgi_ignore_headers指令禁用此功能。

因此,為了簡化這一點,請使用簡單的 nginx 配置進行路由:

location /movies/ {
   include fastcgi_params;
   fastcgi_pass ...;
   fastcgi_param SCRIPT_FILENAME /path/to/stream_movies.php;
}
location /live/ {
   include fastcgi_params;
   fastcgi_pass ...;
   fastcgi_param SCRIPT_FILENAME /path/to/stream_live.php;
}

…並且在 PHP 中,您應該發送X-Accel-Buffering: no標頭欄位以禁用緩衝。對於普通的 PHP,你可以使用類似的東西:

if (filter_input(INPUT_GET, 'type') == 'hls') {
   // buffering is on by default, disable it for HLS
   header('X-Accel-Bufferring: no');
}

fastcgi_buffering請記住,預設值為on。根據您的需要調整上述邏輯。

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