LINUX.ORG.RU
ФорумAdmin

FTP/HTTP сервер: удаление файлов после скачивания

 , , , ,


0

3

Салют.

Нужно сделать так, чтобы ссылки на файлы (http или ftp) были одноразовыми. Т.е. удалялись, как только пользователь их скачал (или начал скачивать, но отменил загрузку или потерял коннект).

Желательно это сделать средствами самого http/ftp-сервера, а не костылями навроде парсинга логов по крону.

Весь контент статический. Пользователей у сервера будет 1-2, а скачивать они будут ой как редко. Но экзотический софт не подходит, хотелось бы управиться в рамках классики типа lighttpd/nginx/vsftpd/...

Знаю про post_action nginx, можно повесить туда соответствующий скрипт через fastcgi, но по-моему, это забивание микроскопом гвоздей.

Файлы, кстати, большие, так что FTP предпочтительней.

★★★★★

ftp — кал, плохо пролазит через нат, плохо пролазит через сквид, кромешный ад с кодировками, а вот способ с nginx мне нравится

anonymous
()

Вряд ли есть такая нетривиальная функциональность. Более нормальный вариант, чем логи по крону - собирать логи syslog-ом и писать в именованный пайп, откуда забирать постоянно работающим скриптом. Срабатывать будет быстрее + никакой лишней работы, если сервер не трогали.

selivan ★★★
()

Сделай (на nginx) через X-Accel-Redirect. Backend на скриптовом языке проверяет корректность ссылки и возвращает реальную ссылку в заголовке X-Accel-Redirect. Дальше nginx отдаёт клиенту файл самостоятельно. Это даст защиту от второго скачивания, а сам файл можно удалять через сутки, например. Или вообще не удалять.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Плюсую. Проще написать простенький бэкенд, который будет проверять факт предыдущего скачивания.

strangeman ★★★★
()
Ответ на: комментарий от i-rinat

А меня не интересует защита от второго скачивания, меня интересует защита от DoS. Точнее, не совсем от DoS...

Тут какая ситуация, файлы (автоматически) генерируются по запросу; после запроса выдаётся ссылка на сгенерированный файл. Файлы могут весить несколько гигабайт. Если быстро позапрашивать много таких файлов, то к чертям забьётся ФС — вот в чём дело. Поэтому-то и хочется удалять файлы сразу после того, как пропадает в них необходимость.

Obey-Kun ★★★★★
() автор топика

Отдавать файлы через скрипт (похапэ, перл, питон, руби, да хоть Си). Скрипт принимает как входной параметр указатель на файл, отдаёт файл пользователю, за-тем удаляет файл.
Хотя именно в данном случае парсинг логов выглядит предпочтительнее.

MrClon ★★★★★
()
Ответ на: комментарий от anonymous

Для inotify это будет выглядеть как куча событий чтени файла от процесса сервера. Как определить, какое из них последнее? Тайм-ауты вставлять? Если сервер держит файл открытыи всё время, можно его удалять сразу, но такого поведения сервера никто не гарантирует.

Ещё фича: прочитал случайно файл, например, утилитой бекапа - всё, файл пизданулся.

selivan ★★★
()
Ответ на: комментарий от selivan

Нельзя чтоли проследить, кто именно открыл файл и при первом открытии файла вебсервером, этот файл удалить? И чего бы серверу файл закрывать просто так, без отключение клиента?

anonymous
()

Для apache я бы предложил mod_rewrite...

no-dashi ★★★★★
()
Ответ на: комментарий от anonymous

Можно, по сравнению с простым парсингом логов из именованного системе - получается сложнее и дополнительная связность.

И чего бы серверу файл закрывать просто так, без отключение клиента?

По идее - незачем. Но полагаться на недокументированную функциональность никогда нельзя, это совершенно неправильный подход.

selivan ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.