Как выполнить действие по завершении скачивания файла из NGINX?
Сервис создаёт крупный файл и даёт его скачать клиенту 1 раз. Сразу после завершения скачивания файл желательно удалить.
Есть ли у NGINX возможность выполнить скрипт по завершении скачивания файла из определённого location?
Как я понимаю, запись в логе появляется именно по завершении отдачи файла. Но раз в секунду смотреть, что там появилось в логе нового - вариант так-себе.
На сколько крупный файл? Так ли необходимо вообще сохранять этот файл на стороне сервера? Можно же напрямую вывести с backend данные для сохранения у пользователя, а в backend уже не сложно будет разобраться какой раз обращаются с этими параметрами. И файлы не захламляют сервер, и скачивание 1 раз.
Андрей Михалёв, файлы около 1Гб, mp4, генерятся асинхронно, из очереди, воркером бэкенда.
На фронт поступает пуш, и там появляется кнопка Скачать.
Гнать файлы через php нежелательно, поэтому отдаются самим nginx.
А как вы себе представляете процесс отслеживания скачивания на nginx? типа получил от клиента запрос на скачивание последний байтов файла - даем скачать и удаляем? Или как? А как же дозагрузка? А как же перекачка нужных фрагментов файла в случае ошибок сети и прочего?
Андрей Михалёв, сферическое скачивание в вакууме: скачиваниеине не последнего байта, а файла завершено (этот момент NGINX вроде знает, тогда и пишет в лог, сколько байт передано за какое время, и какой статус)
И тут какой-нибудь Lua скрипт из конфига удаляет файл в контексте завершенного запроса.
Или внешний — по аналогии как NGINX принимает загрузки сам и потом дергает скрипт proxy_pass
Не думаю что это хорошая идея надеяться на сервер что он точно отследит момент скачивания. На клиенте файл может оказаться битым. Но вы пробуйте, потом расскажите, интересно даже стало. А цель у вас какая? Удалять мусорные файлы? Или защита файлов? Если последнее то почитайте про x-accel. Если первое - то если скачивает браузер - лучше отследить это в браузере и, например, через ajax послать запрос на удаление файла после успешного скачивания.