Назад | Перейти на главную страницу

Как я могу предотвратить загрузку большого файла пользователями?

Я обслуживаю статическую папку с NGINX.

Внутри этой папки у меня есть один конкретный файл размером 60 ГБ, но он предназначен только для чтения небольшими порциями с использованием HTTP-запроса, подобного следующему:

Поэтому, если пользователь пытается загрузить весь файл, NGINX должен отказаться от этого.

Есть некоторые способы, которыми я вижу, что это можно сделать, например:

  1. Проверьте, есть ли заголовок HTTP-запроса Range существует, а диапазон байтов меньше X.

  2. Проверьте, меньше ли запрашиваемая полезная нагрузка ответа, например, 100 МБ.

Но я не знаю, как это можно реализовать в NGINX.

Я думаю, что вы можете настроить nginx для проверки определенного местоположения (местоположение файла 60 ГБ) на предмет наличия определенного (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 для использования такого скрипта вам необходимо добавить логику в скрипт (условия диапазона), а также запретить прямой доступ к большому файлу.

То, что вы ищете, описано здесь в модуле Slice - https://www.nginx.com/resources/wiki/modules/slice/