Apache 2.2 新特性概述

优质
小牛编辑
134浏览
2023-12-01

这篇文档简述了Apache HTTP Server 2.0和2.2 版本之间的主要差异。对于1.3版本以后的新特性,请参考Apache 2.0 新特性文档。

核心增强

认证/授权(Authn/Authz)
原本捆绑在一起的认证(authentication)与授权(authorization)模块现在被分开了。新的mod_authn_alias模块可以极大的简化某些身份认证的配置。请参见模块名的变更和针对模块开发者的变更以了解更多有关这些变更对于模块使用者和模块开发者的影响。
缓冲
mod_cachemod_disk_cachemod_mem_cache经历了诸多修改以后现在已经具备了合格的产品质量了。新增加的htcacheclean工具可以用来清理mod_disk_cache模块使用的缓冲存储区。
配置
默认的配置布局已经被简化并模块化了。启用常用特性的配置片段现在已经和Apache捆绑在一起,可以被轻易的添加到主配置文件中。
优雅停止(Graceful stop)
preforkworkerevent多路处理模块(MPM)现在允许httpd通过graceful-stop信号被优雅的停止。可以用新增的GracefulShutdownTimeout指令指定一个超时时间,超过指定的时间以后httpd将会强行中止,而无论请求所处的服务状态如何。
代理
新增的mod_proxy_balancer模块为mod_proxy提供了负载均衡服务。新增的mod_proxy_ajp模块为Apache Tomcat使用的Apache JServ Protocol version 1.3提供了支持。
正则表达式库更新
5.0版的Perl兼容正则表达式库(PCRE)已经被包含进来了。httpd现在可以通过 --with-pcre 编译选项使用系统中已经安装好的PCRE。
智能过滤器
mod_filter可以进行输出过滤器链的动态配置。它允许过滤器按照请求头或应答头或环境变量有条件的插入,这样就避免了许多在Apache2.0体系结构中存在的过滤器之间的依赖性和顺序问题。
大文件支持
httpd现在已经被构建为在现代的32位Unix系统上支持大于2GB的文件。而且也可以处理大于2G的请求体(request body)。
Event MPM
event多路处理模块(MPM)使用一个单独隔开的线程处理持久连接(Keep Alive)。传统上,持久连接要求httpd专门拿出一个工作者(worker)(也就是一个进程/线程)来处理它。这个专用的工作者在持久连接超时前不能被重新使用。
SQL数据库支持

mod_dbd和apr_dbd框架(framework)一起为需要使用数据库的模块提供直接的支持。在线程化的MPM中还能支持连接缓冲池。

Windows用户请注意,这个特性尚未包含在标准的windows版Apache中。如果你尝试在Windows平台上使用这个特性,请告诉我们你的进展情况。

模块增强

认证/授权(Authn/Authz)
aaa目录下的模块已经被重新命名并提供了对摘要认证(digest authentication)的更好支持。例如,mod_auth现在已经被分割成mod_auth_basicmod_authn_file两个模块;mod_auth_dbm现在更名为mod_authn_dbm;mod_access现在更名为mod_authz_host;还新增了一个mod_authn_alias模块用于简化某些认证配置。
mod_authnz_ldap
这个模块是2.0版mod_auth_ldap模块到2.2版的Authn/Authz框架的一个移植。新的特性包括使用LDAP属性值和Require指令中复杂的搜索过滤器。
mod_info
添加了一个新的 ?config 参数,可以用来显示被Apache分析过的配置指令,包括它们的文件名和行号。该模块还显示所有请求钩子(request hook)的顺序和额外的编译信息,有些类似于 httpd -V
mod_ssl
添加了RFC 2817支持,它允许连接从明文提升到TLS加密。
mod_imagemap
mod_imap已经被重命名为mod_imagemap,以避免用户产生混淆和疑惑。

程序增强

httpd
添加了一个新的命令行选项 -M 用来列出基于当前配置加载的所有模块。不同于 -l 选项的是,它还列出了通过mod_so加载的DSO(动态共享对象)。
httxt2dbm
一个用于从文本输入产生dbm文件的程序,目的是为了能够在RewriteMap中使用dbm映射表(map)类型。

针对模块开发者的变化

APR 1.0 API
Apache2.2 使用 APR 1.0 API 。所有反对使用的函数和符号已经从 APRAPR-Util 中清除掉了。欲知详情,请查看APR 网站
认证/授权(Authn/Authz)
原来捆绑在一起的认证和授权模块已经被按照下列规则进行了重命名:
  • mod_auth_*    -> 实现HTTP认证机制的模块
  • mod_authn_*  -> 实现后端认证支持者的模块
  • mod_authz_*   -> 实现授权(或访问)的模块
  • mod_authnz_* -> 同时实现认证和授权的模块
现在有一个新的认证后端提供者方案,可以简化新认证后端的创建。
连接错误日志
添加了一个新的ap_log_cerror函数用于记录客户端连接时发生的错误。并且在记录时包含客户端IP地址。
添加了一个测试配置的钩子(hook)
添加了一个新的test_config 钩子,可以在用户向httpd传递 -t 选项时,执行包含特定代码的模块。
设置线程型MPM所使用的栈空间大小
新增的ThreadStackSize指令可以用来限制所有线程型MPM所使用的栈大小。一些默认栈空间较小的平台上的第三方模块需要使用它指定栈空间的大小。
输出过滤器协议处理
过去,每个过滤器都要确保自身能够产生正确的应答头。现在过滤器可以调用ap_register_output_filter_protocolap_filter_protocol来委托mod_filter进行协议管理。
添加了监视钩子(Monitor hook)
监视钩子可以让模块运行父进程中事先安排好的工作。
正则表达式 API 发生了变化
pcreposix.h头文件现在被ap_regex.h头文件取代了。原来老的POSIX.2 regex.h 实现现在位于ap_命名空间下(由ap_regex.h提供)。比如原来的regcomp, regexec调用现在要修改成ap_regcomp, ap_regcomp调用。
DBD框架(SQL数据库API)

在1.x和2.0版本中,需要SQL支持的模块必须自己管理数据库。为了不要重新发明轮子,Apache 2.1 及以后的版本提供了ap_dbd API 来管理数据库连接(包括对线程型和非线程型MPM进行优化),同时 APR 1.2 及以后版本也提供了apr_dbd API 与数据库打交道。

新模块应当使用了这些API来进行数据库操作。现存的应用程序应当进行透明的升级或使用推荐选项来使用这些API。