复杂的 Nginx Vhost 配置

复杂的 Nginx Vhost 配置

我花了一整天时间尝试配置 nginx vhost 以满足我的需求,但总是出错。以下是我需要做的。

我有一台服务器,用于播放电影和直播。电影和直播是从 .php 文件重新播放的。一切都很好。这两个文件是 stream_live.php 和 stream_movies.php

我想根据我选择的类型值使用不同的 fastcgi_ 设置。例如,对于直播,您可以选择 mpegts 或 hls。我希望将其作为 PHP 文件中的参数。现在我将举例说明,以便更好地理解它。

我希望每次用户提出这样的请求时:

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

使用参数 username、password、id 和 type (此处 1 = id) 在文件 stream_live.php 中进行重定向。我该如何做?

对于电影,我想要一个类似的

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

在文件 stream_movies 中重定向,参数为用户名/密码/ID (1 = ID)

一个小提示!正如我上面所说,如果您请求电影或直播,我想使用不同的设置。

因此对于电影我想使用

  • fastcgi_buffering 关闭;

对于直播我想使用

  • fastcgi_buffering开启; 除了类型=hls我想要它fastcgi_buffering 关闭;

抱歉,我请求整个 nginx 配置,但我试了一整天都没能成功。:(

谢谢

答案1

所以基本上你只想fastcgi_buffering根据类型参数控制设置?阅读精美手册请注意这部分:

还可以通过在“X-Accel-Buffering”响应标头字段中传递“是”或“否”来启用或禁用缓冲。可以使用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_bufferingon。请根据您的需要调整上述逻辑。

相关内容