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_cache
、mod_disk_cache
、mod_mem_cache
经历了诸多修改以后现在已经具备了合格的产品质量了。新增加的htcacheclean
工具可以用来清理mod_disk_cache
模块使用的缓冲存储区。- 配置
- 默认的配置布局已经被简化并模块化了。启用常用特性的配置片段现在已经和Apache捆绑在一起,可以被轻易的添加到主配置文件中。
- 优雅停止(Graceful stop)
prefork
、worker
、event
多路处理模块(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_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支持,它允许连接从明文提升到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 。所有反对使用的函数和符号已经从
APR
和APR-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_protocol
或ap_filter_protocol
来委托mod_filter
进行协议管理。 - 添加了监视钩子(Monitor hook)
- 监视钩子可以让模块运行父进程中事先安排好的工作。
- 正则表达式 API 发生了变化
pcreposix.h
头文件现在被ap_regex.h
头文件取代了。原来老的POSIX.2regex.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。