複雜的 Nginx 虛擬主機配置
我嘗試了一整天來製作一個 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
。根據您的需要調整上述邏輯。