Как стать автором
Обновить

Редкие фичи nginx: mod_zip

Время на прочтение2 мин
Количество просмотров6.5K
Раз уж зашел разговор о редких и полезных модулях для nginx — я расскажу вам об онлайн упаковщике ZIP файлов для nginx. Он позволяет на лету формировать ZIP архив из заданного списка файлов с возможностью многопоточной скачки и докачки файла, но без сжатия.


Пример использования


Есть большой сервис для хранения пользовательских файлов. Одной из фич нашего файлшаринга является то, что можно залить торрент файл, а наша система его уже сама скачает и закачает на сервера. Очень часто, скаченные торренты бывают разбиты на десятки файлов по 10-100 Мбайт и чтобы скачать их все — пользователю придется кликнуть от 10 до 100 раз на каждый файл, чтобы скачать архив целеком. Но с помощью nginx mod_zip мы позволяем пользователю кликнуть всего один раз и просто наслаждаться скоростью скачки ;) (те люди, которые скажут что проще систему научить самой разархивировать такие файлы — пусть почитают про Zip Bomb)

Плюсы


1. Экономия места и процессорного времени на создание статичного ZIP файла.
2. Скачивание такого ZIP файла не занимает больше ресурсов, чем скачивание одного статического файла с nginx

Минусы


1. Необходимо знать точный размер, путь и crc32 файла. (Если не указать crc32 — не будет поддерживаться докачка и многопоточность)
2. Версия 1.1.4 не поддерживает суммарный вес архива больше 4 GB. Код который это исправляет уже был послан автору плагина на ревью. За патчик огромное спасибо хабраюзеру vasfed. Этот код скоро будет включен в основную ветку.
3. Есть подтвержденный баг с многопоточной скачкой, который обещали поправить в версии 1.1.5 (в некоторых случаях файл скачивается битым)

Как начать использовать?


1. Скачать mod_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 My Document1.txt
83e8110b 100339 /bar.txt My Other Document1.txt

4. Скачать ZIP файл и наслаждаться.

Пройденные грабли


1. Если хоть один из переданных Вами файлов отсутствует на диске — весь архив скачается битым, поэтому надо проверять наличие файлов по факту запроса ZIP файла.
2. Если вы неправильно передали размер файла — архив скачается битым.
3. Разные утилиты генерируют разные значения crc32. Мы остановились на пакете «perl-Archive-Zip» (Fedora), который включает в себя утилитку crc32, написанную на перле.

p.s. о выходах новыйх версий mod_zip — я буду сообщать в рассылку nginx
Теги:
Хабы:
Всего голосов 10: ↑8 и ↓2+6
Комментарии15

Публикации