nginx 提供静态文件并更改路由/路径

nginx 提供静态文件并更改路由/路径

我想使用 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;
}

我想我会分享。

相关内容