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