С разговор начался о редких и полезных модулях для nginx — расскажу об онлайн-упаковщике ZIP-файлов для nginx. Позволяет на лету создавать ZIP-архив из заданного списка файлов с возможностью многопоточной загрузки и возобновления файла, но без сжатия.
Пример использования
Есть большой сервис для хранения пользовательских файлов.Одной из особенностей нашего файлообменника является то, что вы можете загрузить торрент-файл, а наша система сама его скачает и загрузит на серверы.
Очень часто скачанные торренты разбиваются на десятки файлов по 10-100 МБ каждый, и чтобы скачать их все, пользователю придется кликать по каждому файлу от 10 до 100 раз, чтобы скачать весь архив.
Но с nginx mod_zip мы разрешаем пользователю кликнуть всего один раз и просто наслаждаться скоростью загрузки ;) (те люди, которые говорят, что проще научить систему самой разархивировать такие файлы - пусть почитают про Почтовая бомба )
плюсы
1. Экономия места и процессорного времени при создании статического ZIP-файла.
2. Загрузка такого ZIP-файла не отнимает больше ресурсов, чем загрузка одного статического файла с nginx.
Минусы
1. Вам необходимо знать точный размер, путь и crc32 файла.(Если вы не укажете crc32, возобновление и многопоточность поддерживаться не будут) 2. Версия 1.1.4 не поддерживает общий вес архива более 4 ГБ .
Код, исправляющий это, уже отправлен.
автор плагина для обзора.
Огромное спасибо Хабраузеру за патч васкормленный .
Этот код скоро будет включен в основную ветку.
3. Есть подтвержденный баг с многопоточной загрузкой, который обещали исправить в версии 1.1.5 (в некоторых случаях файл скачивается битым)
Как начать его использовать?
1. Скачать мод_zip 1.1.4 и перекомпилируйте nginx с ключом --add-module=/path/to/mod_zip-1.x 2. В вашем скрипте передайте заголовок: «X-Archive-Files:zip» (чтобы mod_zip понял, что ему пора приступать к работе) 3. Отобразите список необходимых файлов, например: 1034ab38 428 /foo.txt Мой документ1.txt 83e8110b 100339 /bar.txt Мой другой документ1.txt 4. Загрузите ZIP-файл и наслаждайтесь.
Пройденные грабли
1. Если хотя бы один из переданных вами файлов отсутствует на диске, то весь архив будет скачан битым, поэтому проверять наличие файлов нужно по запросу ZIP-файла.2. Если вы указали неправильный размер файла, то архив скачается битым.
3. Разные утилиты генерируют разные значения crc32. Мы остановились на пакете «perl-Archive-Zip» (Fedora), который включает в себя утилиту crc32, написанную на Perl. п.
с.
О выходе новых версий mod_zip сообщу в информационный бюллетень nginx Теги: #Nginx #патч nginx #mod_zip
-
Каждая Постройка, Которую Вы Ломаете
19 Oct, 24 -
Иду 2010
19 Oct, 24