|
|
|
|
| 搜索 首页 |
预期于本月(2000.12)出台的Apache 2.0 Beta 在众人的翘首等待中,终于还是美人迟暮,没有露面。 推迟的原因 所有的过错来源于一个问题,那就是 mod_include。 显然,这是一个很主要的问题,因为很多网站依赖于 Server Side Includes(SSI) 来建立动态的页面。 在1.3 版本中,这个模块作为句柄来实现,也就是SSI 必须 存放在磁盘上,在Apache 2.0是作为过滤器来实现的,这样,SSI 可以是存放在磁盘的文件,也可以是CGI 的输出或者其他任何模块的输出。然而,重写 mod_include 作为过滤器,却成为一个大问题。经过几周的工作,现在已经完工了。 在等待 mod_include的过程中,发现了管道日志(piped logs),也有重大问题。于是,检测Apache 和日志程序 之间的管道是否还可写,如果不是的话,Apache 认为日志程序已经停顿会重新启动之,但是问题是在很多情形下,操作系统会报告管道不可写,而进程停止阅读只是其中之一。如果管道满的话,我们可以看到Apache 会停止和重新启动日志程序。 改变的内容 mod_include 在Apache 1.3 中,如果想要为mod_include 增加 SSI 标记(tag) 的话, 必须直接修改模块。最明显的两个标记就是PERL 标记和 CGI 标记, PERL 标记允许在 SSI 内部嵌入Perl 代码,但是必须安装mod_perl 才能实现,也就是说mod_include 依赖于mod_perl。 CGI 标记允许SSI 运行指定的CGI 脚本,这里的问题是他需要在mod_include 和 mod_cgi 之间重复很多逻辑。例如:所有的 SuExec 逻辑就是在两个模块之间重复,同样的还有 RLIMIT 逻辑。在 Apache 2.0 这个问题更加严重,因为有两个 CGI 模块 mod_cgi 和 mod_cgid。这意味着同样的逻辑安置在三个地方而不是只有两个。这也导致了配置错误。很多Web 站点拒绝CGI 脚本,因为他们是潜在的安全威胁。所以可能会采用简单的SSI 来提供动态网页。他们显然不会安装 mod_cgi ,但是增加 mod_include 以后,如果 配置不正确就可能可以运行CGI 脚本了。 采用让 mod_include 只使用最小化的SSI 标记, 这个问题就得到了解决。mod_include 还采用了钩子(hook)以允许别的模块扩充它的能力。 例如:Apache 2.0 中,mod_include 不再实现perl 标记,如果mod_perl 希望实现这个 tag,那么就能很自由的这样做。在不久的将来,mod_include 也会停止实现 CGI 标记,而把这个标记移到mod_cgi 和 mod_cgid。这样就消除了那些不需要 CGI 的网站因为使用了SSI 而产生 没有预料的结果的可能。如果 mod_cgi 没有使用的话,那么所有处理CGI 的能力将删除。 其他模块可以通过调用ap_register_include_handler来扩充mod_include 。这个函数传递一个字符作为标记,一个函数来实现这个标记 。 mod_include 读入参数并分析,搜索"<!--" 标记表示 SSI 的开始。然后找出真正的 SSI 标记,一旦找到就调用那个登记的函数。这样mod_include 就实现了基本的最小功能,而允许一个功能非常强大的分析语言。这样处理也让开发人员可以把常用的代码放在一个地方,而使将来的代码容易维护。 可靠的管道日志 第二个重大修改就是管道日志的问题,以前Apache 通过检测管道是否可写来决定杀死当前进程并重新派生一个。这就需要保证日志程序一定能够记录Apache 的输出日志。问题是管道刚好满而不能写入,程序需要用所有的资源读入管道并把日志写入磁盘。如果Apache 杀死日志程序并重新启动之,则部分日志将丢失,更麻烦的是会频繁的重新启动。 解决问题的办法就是如果管道不可写,不重新启动日志程序。Apache 的开发人员认为如果日志程序真的停止了的话,那么系统管理员应该有责任重新启动服务器,这样也启动了日志程序。如果日志程序因为特殊的原因而死去的话,这个管道还是会重新启动日志程序的。 源代码重新组织 最后的重大改变就是源代码几乎来了个底朝天,全部翻了一遍。以前,Apache 开发人员努力提供一个简单的源码树也作为二进制安装。Apache 2.0 的源码树和1.3 几乎一样,但是这棵树没有很大意义了。在 Apache 1.3 中,源码树用来建立一个Web 服务器,但是在 Apache 2.0 中是一个服务器 HTTP 模块的骨架,新的源码树体现了Apache 开发人员的新的着重点,虽然与协议无关还没有做好,但是新的设计迫使开发人员考虑这个摘要。新的设计还介绍了新的Apache Portable Run-time 项目:apr-util。这是一套 Apache 开发人员认为Web Server 以外十分有用的工 具。这些函数从Apache 2.0 开始就可以移植到任何平台。这个库并非和操作系统不相关,而是那些实现的函数可以用于很多不同的程序。例如:用来帮助思想过滤器的bucket 函数就包括在这个库中。 重新组织源码树花费了开发人员好几个星期。最新的alpha 9 ,已经用上了这个源码树。当前的源码树不再保存在 apache-2.0 CVS 库,库中的是老的 2.0 的树,新树位于 httpd-2.0。 将来的计划 Apache 小组计划在12月22日推出第一个Beta,当然,还不能保证,因为还有很多需要修改。一个修改就是开发人员打算让2.0 支持IPV6。另外,一个简单的基准测试的工具 ApacheBench 和 Apache 一起发行,现在支持 IPv6。在beta 出来之前,还有很多开发人员需要解决的问题,但是他们相信这些问题能够在22日之前赶出来。如果不能及时 解决的话,他们会加倍努力。但是他们不会在没有准备好之前就推出Beta 版本,这样的话,会让那些使用Apache 架构网站的人失望的。 < | >
|
|
|||||||||||
|
|||||||||||||
|
禅道
须在生活中修,在日常言语、形式里面契合、印证
自我的觉醒却是光阴偷不走,人拿不走的。 | ||||||
|
||||||