从归档中提供静态文件

时间:2011-02-20 19:26:37

标签: apache nginx archive serving

是否有一个模块用于apache / nginx来提供来自archive(zip,tgz,tbz ...)的静态文件,这样如果指定位置没有文件,那么会要求说明存档文件?

5 个答案:

答案 0 :(得分:3)

我不知道这样的模块。

如果您自己编写,我建议您查看try_files指令http://wiki.nginx.org/HttpCoreModule#try_files并将请求参数移交给脚本,例如:一个php文件(在wiki页面上看到try_files行以:/index.php?q=$uri&$args;结尾)。

性能: 这样你就可以用php做一些安全检查,整理出搜索引擎机器人,甚至可以在解压后解压缩一些文件,但这取决于你的具体请求统计/模式。

某些工具或pear包可能允许您将文件解压缩到管道(stdout)并避免转储到文件系统,或者可以在ramdisk中进行解包以加快速度。但同样,要走的路还取决于你的文件大小,以便做出类似可靠的东西。

答案 1 :(得分:2)

对于.tgz和.tbz的情况,大多数性能损失(特别是大型存档)应该来自于您必须从磁盘读取并解压缩所有数据(包括您要求的文件)的事实。如果您要求存档中的最后一个文件,那么无论是CGI脚本还是网络服务器,仍然需要花时间阅读,解压缩和丢弃所有存档数据,以便访问您的文件。

Zip格式允许随机访问。如果您的CGI脚本非常简单(可以是sh脚本),并且基本上只是使用正确的参数调用“解压缩”,那么使用服务器模块可以获得的加速量相当小。

那就是说,如果不存在这样做的模块(但是没有,我找不到),那就太疯狂了。

答案 2 :(得分:1)

另一种可能是使用压缩文件系统,具体取决于文件的类型和分布以及重复数据删除。

临:

- 几乎相同的效果是.zip文件(存储明智)

- 无需更改所需的Web服务器部件

缺点:

- 可能是用于拉链DIR的新FS

- 在使用的​​操作系统(例如ZFS)下可能不存在

如果你澄清你想要实现的目标,也许还有另一种方式。

答案 3 :(得分:1)

你应该看看SquashFS,它是一个压缩文件系统。

您可以将其视为tar.gz存档,主要用于LiveCD / DVD / USB ISO,但完全适用于您的情况。

Here是一个HowTo。

PS:与其他答案相反,您不需要特定的操作系统来使用SquashFS,但如果您碰巧运行Solaris或FreeBSD,请进行ZFS压缩,这很棒!

答案 4 :(得分:0)

我怀疑没有,特别是当找不到常规文件时作为后备。也就是说,执行它的CGI脚本会非常简单。然而,在负载下,性能损失很可能是显而易见的。