nginx,用于下载或流式传输文件的位置的替代方案

nginx,用于下载或流式传输文件的位置的替代方案

我有一个问题。在 nginx.conf 中,我只想在查询参数中包含“?dl=1”时下载文件,否则我想流式传输视频 mp4。

我已经写了这段代码:

 location ~\mp4 {
     if ($args_dl = "1") {
            types { application/octet-stream (.mp4); }
            default_type application/octet-stream;
     }
}

此代码不起作用,因为 location 中有一个 if 语句。我应该如何更改它才能执行相同的操作?谢谢

答案1

您可能能够使用 nginxmap功能来实现此目的。将以下内容添加到httpnginx 配置中的级别:

map $arg_dl $mimetype {
    default video/mp4;
    1       application/octet-stream;
}

这个$mimetype根据 URL 查询参数的值来设置变量的值dl。如果dl为 1,则 mimetype 设置为application/octet-stream,否则设置为video/mp4

然后使用映射的变量,location如下所示:

location ~ \.mp4$ {
    types {
        $mimetype mp4;
    }
    default_type $mimetype;
}

这是完全未经测试的,这是第一次在内部使用映射变量types

我还改进了location匹配以明确匹配.mp4扩展名。location ~ \mp4可以匹配任何包含的 URL mp4,因此可能会导致问题。

相关内容