是否有 apache/nginx 的模块可以从存档(zip、tgz、tbz ...)中提供静态文件,这样如果指定位置没有文件,则要求指定存档提供该文件?
5 回答
我不知道这样的模块。
如果您自己编写,我建议您查看try_files
指令 http://wiki.nginx.org/HttpCoreModule#try_files并将请求参数传递给脚本,例如 php 文件(参见 wiki 页面以: 结尾的 try_files 行/index.php?q=$uri&$args;
。
性能:通过这种方式,您可以使用 php 进行一些安全检查,整理搜索引擎机器人,甚至可能在您将文件解包后 memcache 一些文件,但这取决于您的特定请求统计信息/模式。
一些工具或 pear 包可能允许您将文件提取到管道 (stdout) 并避免转储到文件系统或在 ramdisk 中进行解包以加快速度。但同样,要走的路取决于您的文件大小,以使类似的东西可靠。
对于 .tgz 和 .tbz 的情况,大部分性能损失(尤其是大型档案)应该来自您必须从磁盘读取并解压缩所有数据直至并包括您要求的文件的事实。如果您要求存档中的最后一个文件,那么无论是 CGI 脚本还是 Web 服务器,仍然需要花费时间读取、解压缩和丢弃所有存档数据才能获取您的文件。
Zip 格式确实允许随机访问。如果您的 CGI 脚本非常简单(可以是 sh 脚本),并且本质上只是使用正确的参数调用“解压缩”,那么您可以通过使用服务器模块获得的加速量会相当小。
也就是说,如果不存在用于执行此操作的模块(但不,我一直找不到),那就太疯狂了。
另一种可能性可能是使用压缩文件系统,这取决于文件的类型和分布以及重复数据删除。
临:
- 与 .zip 文件具有几乎相同的效果(存储方式)
- 无需更改网络服务器部分
缺点:
- 可能是 zip DIR 的新 FS
- 在使用过的操作系统下可能不存在(例如 ZFS)
如果你澄清你想要达到的目标,也许还有另一种方法。
我怀疑没有,尤其是在找不到常规文件时作为后备。也就是说,执行此操作的 CGI 脚本将相当简单。但是,在负载下,性能损失很可能会很明显。