我想使用 nginx 从 /data/content/video/ 之类的目录提供静态文件,而 url 路由则完全不同,例如 www.url.com/reports/video-name.mp4
我尝试了几种重写规则和位置,但似乎没有什么按照我预期的方式进行,这可能吗?
这适用于以视频名称作为唯一路由参数的情况(例如 www.url.com/video-name.mp4):
location ~ \.(mp4) {
root /data/content/video;
chunked_transfer_encoding on;
proxy_buffering off;
mp4;
mp4_buffer_size 4M;
mp4_max_buffer_size 10M;
}
是否有重写规则或正则表达式可用于提取 video-name.mp4,以便它尝试提供的文件是:/data/content/video/video-name.mp4
来自此请求www.url.com/reports/video-name.mp4
答案1
答案的关键可能在于您的位置定义。这可能不太完美,但它应该能为您提供自己解决问题的线索。
location ~* /reports/ {
root /data/content/video;
// etc
}
您的问题不是特别清楚,所以如果这没有回答您想要问的问题,我建议您编辑这个问题。
答案2
您不应该在块root
内部使用location
,因为它会造成混乱的情况。
您需要使用alias
指令。使用root
,服务器会将完整的 URI 附加到指令指定的目录中。使用alias
,您可以将文件名的任何部分附加到目录中。
尝试这个:
location ~ /reports/+.mp4$ {
alias /data/content/video;
....
}
答案3
不确定这是否是最好的选择,但我确实使用块中的重写使其工作,如下所示:
location ~ \.(mp4) {
rewrite ^(.*)/reports/(.*)$ $1/$2;
root /data/content/video;
chunked_transfer_encoding on;
proxy_buffering off;
mp4;
mp4_buffer_size 4M;
mp4_max_buffer_size 10M;
}
我想我会分享。