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

我想通过一个像/ data / content / video /这样的目录中的nginx来提供静态文件,这个目录完全不同于www.url.com/reports/video-name.mp4

我已经尝试了几个重写规则和位置,但似乎没有工作,因为我打算,这是可能的吗?

这与video名称一起作为唯一的路由参数(例如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; } 

有一个重写规则或正则expression式,我可以用来拉出video-name.mp4,以便它试图服务的文件是: /data/content/video/video-name.mp4从这个请求www.url.com/reports/video-name.mp4

答案的关键在于您的位置定义。 这可能不会完美,但它应该给你一个线索,自己解决。

 location ~* /reports/ { root /data/content/video; // etc } 

你的问题不是特别清楚,所以如果这不是回答你想问的问题,我build议你编辑这个问题。

您不应该在location块内使用root ,因为它会导致混淆的情况。

你需要使用alias指令。 以root身份,服务器将完整的URI附加到指令指定的目录。 使用alias ,您可以将文件名的任何部分追加到目录中。

尝试这个:

 location ~ /reports/+.mp4$ { alias /data/content/video; .... } 

不知道这是否是最好的select,但我确实得到了这个工作使用块重写这样的:

 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; } 

我想分享。