Я обслуживаю статическую папку с NGINX.
Внутри этой папки у меня есть один конкретный файл размером 60 ГБ, но он предназначен только для чтения небольшими порциями с использованием HTTP-запроса, подобного следующему:
Поэтому, если пользователь пытается загрузить весь файл, NGINX должен отказаться от этого.
Есть некоторые способы, которыми я вижу, что это можно сделать, например:
Проверьте, есть ли заголовок HTTP-запроса Range
существует, а диапазон байтов меньше X.
Проверьте, меньше ли запрашиваемая полезная нагрузка ответа, например, 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/