我有一个问题。在 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
功能来实现此目的。将以下内容添加到http
nginx 配置中的级别:
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
,因此可能会导致问题。