如何避免用户下载大文件?

如何避免用户下载大文件?

我正在使用 NGINX 提供静态文件夹。

在该文件夹中,我有一个 60GB 的特定文件,但它只能以小块的形式读取,使用如下 HTTP 请求:

在此处输入图片描述

因此,如果用户尝试下载整个文件,NGINX 应该拒绝。

我发现有些方法可以做到这一点,例如:

  1. 检查HTTP请求头是否Range存在,并且字节范围小于X。

  2. 检查请求的响应有效负载是否小于例如 100MB。

但我不知道如何在 NGINX 中实现这些。

答案1

我认为,您可以配置 nginx 来检查特定位置(60gb 文件位置)是否存在特定(Range)标头。然后您可以阻止不包含 Range 标头的请求。

您可以检查这些链接:

https://stackoverflow.com/questions/18970620/nginx-reject-request-if-header-is-not-present-or-wrong

https://stackoverflow.com/questions/35342049/nginx-reject-request-if-header-not-present/35366796

编辑

在配置中编写复杂条件似乎有点问题Nginx。也许您应该考虑使用一些服务器端脚本(即 PHP)来提供大文件。有很多流式脚本的示例。

https://gist.github.com/ranacseruet/9826293

在配置 Nginx 使用这样的脚本后,您需要向脚本添加逻辑(范围条件)并防止直接访问大文件。

答案2

您正在寻找的内容已包含在这里的 Slice 模块中 -https://www.nginx.com/resources/wiki/modules/slice/

相关内容