X-Accel-Redirect 恢复中断的下载

X-Accel-Redirect 恢复中断的下载

我正在使用 Nginx X-Accel-Redirect 为用户提供一个大型受保护文件(几 GB)。服务器应用程序处理 URL 并验证下载令牌(嵌入在 URL 中)并开始或拒绝下载。问题是,如果下载因任何原因失败,则无法恢复下载。文件真的很大,因此发生这种情况的可能性不容忽视。

更多信息,服务器位于 AWS EC2 上,文件位于 S3 bucket 中。这意味着我们也需要为下载失败付费。

我想知道是否可以使用下载令牌或其他方式保护文件,以便用户不能仅仅与他人共享下载链接,而且在网络断开连接的情况下仍然可以恢复。


python 服务器正在将以下标头转发到 Nginx。

content_type='application/force-download'
Content-Disposition='attachment; filename=xxx'
X-Accel-Redirect=<url>

Nginx配置如下。

location ~ ^/protected/(.*) {
    internal;
    resolver 8.8.8.8;
    resolver_timeout 60;
    proxy_hide_header Content-Type; # To hide header from S3
    proxy_hide_header x-amz-id-2;
    proxy_hide_header x-amz-request-id;
    proxy_set_header Content-Type 'application/force-download';
    proxy_max_temp_file_size 0;
    proxy_pass https://***.amazonaws.com/***/$1;
}

答案1

看起来你正在将请求代理到 S3,而不是提供服务预签名 URL普通的重定向(例如 303),而不是 X-Accel-Redirect,后者通常是用于制作过期链接的操作。

就您而言,我预计 Range 请求标头将被删除。您应确保使用 中的请求标头从浏览器传递到 S3 proxy_pass_request_headers on;location此外,您可能不应该internal为该 定义location

相关内容