Служить статическим файлам из архива - PullRequest
9 голосов
/ 20 февраля 2011

Существует ли модуль для apache / nginx для обслуживания статических файлов из архива (zip, tgz, tbz ...), так что если в указанном месте нет файла, то для этого файла запрашивается указанный архив?

Ответы [ 5 ]

3 голосов
/ 10 марта 2011

Мне не известен такой модуль.

Если вы напишите свой собственный, я бы порекомендовал вам посмотреть директиву try_files http://wiki.nginx.org/HttpCoreModule#try_files и передать аргументы запроса.кроме сценария, например, файла php (см. на вики-странице строку try_files, заканчивающуюся на: /index.php?q=$uri&$args;).

Производительность: таким образом вы выполняете некоторые проверки безопасности с помощью php, сортируете роботы поисковой системы иможет быть, даже memcache некоторых файлов после того, как вы распаковали их, но это зависит от вашей конкретной статистики / шаблонов запросов.

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

2 голосов
/ 09 марта 2011

В случае .tgz и .tbz большая часть потери производительности (особенно для больших архивов) должна исходить из того факта, что вам нужно читать с диска и распаковывать все данные вплоть до запрошенного вами файла. Если вы запрашиваете последний файл в архиве, то, будь то скрипт CGI или веб-сервер, что-то все равно придется тратить время на чтение, распаковку и удаление всех архивных данных только для того, чтобы добраться до вашего файла.

Формат Zip допускает произвольный доступ. Если ваш CGI-скрипт очень прост (может быть sh-скриптом) и, по сути, просто вызывает «unzip» с правильным аргументом, то скорость, которую вы могли бы получить, если бы серверный модуль сделал это, была бы довольно небольшой.

Тем не менее, это довольно безумно, если модуль для этого не существует (но нет, я не смог его найти).

1 голос
/ 10 марта 2011

Вы должны взглянуть на SquashFS , это сжатая файловая система.

Вы можете рассматривать его как архив tar.gz, используемый в основном в ISO-дисках LiveCD / DVD / USB, но идеально подходящий для вашей ситуации.

Здесь - это HowTo.

PS: В отличие от других ответов, вам не нужна конкретная ОС для использования SquashFS, но если вам случится запустить Solaris или FreeBSD, перейдите на сжатие ZFS , это просто здорово!

1 голос
/ 10 марта 2011

Другой возможностью может быть использование сжатой файловой системы, в зависимости от типов и распределения файлов, также с дедупликацией.

Pro:

- Имеет почти такой же эффект, как и файл .zip (с точки зрения хранилища)

-Не нужно менять часть веб-сервера

Минусы:

-Возможно новая ФС для почтового индекса DIR

-Может отсутствовать в используемых ОС (например, ZFS)

Может быть, есть другой способ, если вы уточните, чего пытаетесь достичь.

0 голосов
/ 03 марта 2011

Я бы заподозрил, что нет, особенно как запасной вариант, когда обычные файлы не найдены. Тем не менее, скрипт CGI сделать это будет довольно просто. Однако при работе под нагрузкой потеря производительности, скорее всего, будет заметна.

...