🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Apache 2.2 新特性概述 这篇文档简述了Apache HTTP Server 2.0和2.2 版本之间的主要差异。对于1.3版本以后的新特性,请参考[Apache 2.0 新特性](#calibre_link-234)文档。 ## 核心增强 认证/授权(Authn/Authz) 原本捆绑在一起的认证(authentication)与授权(authorization)模块现在被分开了。新的`mod_authn_alias`模块可以极大的简化某些身份认证的配置。请参见[模块名的变更](#calibre_link-304)和[针对模块开发者的变更](#calibre_link-305)以了解更多有关这些变更对于模块使用者和模块开发者的影响。 缓冲 `mod_cache`、`mod_disk_cache`、`mod_mem_cache`经历了诸多修改以后现在已经具备了合格的产品质量了。新增加的`htcacheclean`工具可以用来清理`mod_disk_cache`模块使用的缓冲存储区。 配置 默认的配置布局已经被简化并模块化了。启用常用特性的配置片段现在已经和Apache捆绑在一起,可以被轻易的添加到主配置文件中。 优雅停止(Graceful stop) `prefork`、`worker`、`event`多路处理模块(MPM)现在允许`httpd`通过[`graceful-stop`](#calibre_link-309)信号被优雅的停止。可以用新增的`GracefulShutdownTimeout`指令指定一个超时时间,超过指定的时间以后`httpd`将会强行中止,而无论请求所处的服务状态如何。 代理 新增的`mod_proxy_balancer`模块为`mod_proxy`提供了负载均衡服务。新增的`mod_proxy_ajp`模块为[Apache Tomcat](http://jakarta.apache.org/tomcat/)使用的`Apache JServ Protocol version 1.3`提供了支持。 正则表达式库更新 5.0版的[Perl兼容正则表达式库](http://www.pcre.org/)(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_basic`和`mod_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](http://www.ietf.org/rfc/rfc2817.txt)支持,它允许连接从明文提升到TLS加密。 `mod_imagemap` mod_imap已经被重命名为`mod_imagemap`,以避免用户产生混淆和疑惑。 ## 程序增强 `httpd` 添加了一个新的命令行选项 `-M` 用来列出基于当前配置加载的所有模块。不同于 `-l` 选项的是,它还列出了通过`mod_so`加载的DSO(动态共享对象)。 `httxt2dbm` 一个用于从文本输入产生dbm文件的程序,目的是为了能够在`RewriteMap`中使用`dbm`映射表(map)类型。 ## 针对模块开发者的变化 [APR](#calibre_link-318 "see glossary") 1.0 API Apache2.2 使用 APR 1.0 API 。所有反对使用的函数和符号已经从 `APR` 和 `APR-Util` 中清除掉了。欲知详情,请查看[APR 网站](http://apr.apache.org/)。 认证/授权(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_protocol`或`ap_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。