在搜索nginx位置之前,能否从后端服务器检索并存储文件?
问题 我正在使用Nginx Plus中的HLS模块处理流式.mp4文件,使用以下配置:在搜索nginx位置之前,能否从后端服务器检索并存储文件?,nginx,nginx-location,Nginx,Nginx Location,问题 我正在使用Nginx Plus中的HLS模块处理流式.mp4文件,使用以下配置: location /hls { hls; hls_fragment 10s; hls_buffers 10 10m; hls_mp4_buffer_size 1m; hls_mp4_max_buffer_size 10m; alias /var/www/vod/cache; } 当.mp4文件出现
location /hls {
hls;
hls_fragment 10s;
hls_buffers 10 10m;
hls_mp4_buffer_size 1m;
hls_mp4_max_buffer_size 10m;
alias /var/www/vod/cache;
}
当.mp4文件出现在/var/www/vod/cache
中时,一切正常。当客户端请求http://example.com/hls/file.mp4.m3u8
HLS模块动态生成m3u8播放列表并返回
但是,我不希望将所有mp4文件都存储在流式服务器上,而是将文件存储在后端存储服务器上。理想情况下,mp4文件只能从存储服务器检索,并在客户端请求特定视频时本地存储(稍后由cron作业删除)。使用proxy_store,我能够检索mp4文件,并使用如下配置本地存储它们:
location @fetch_content {
internal;
rewrite ^/hls(.*).mp4.m3u8$ $1.mp4 break;
proxy_pass http://example-storage.com;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /tmp;
root /var/www/vod/cache;
}
使用proxy_pass的问题在于nginx直接将mp4文件返回给客户端,而不是m3u8播放列表
是否可以让nginx检索并存储mp4文件,然后使用HLS模块生成m3u8播放列表文件?或者另一种方式,我是否可以检查mp4文件是否存在,如果未找到,则检索并存储它,然后点击/hls位置,该位置将使用hls模块来传输文件
由于这是Nginx Plus,我无法编写模块。我只能使用包含的模块,请参见此处Nginx Plus包含第三方,我能够在定向到/hls位置之前使用Lua从后端服务器检索mp4文件。我不认为已经在那里实现了这种非平凡和非正统的逻辑;-)为什么不直接将远程服务器装载为磁盘卷?让nginx认为所有文件都是本地的?