Apache HTTP Server 2.4 新特性概述
本文档描述了 Apache HTTP Server 2.2 和 2.4 版本之间的一些主要变化。有关 2.0 版以来的新功能,请参阅2.2 新功能 文档。
核心增强
- 运行时可加载 MPM
- 现在可以在编译时将多个 MPM构建为可加载模块。选择的 MPM 可以在运行时通过
LoadModule
指令进行配置。 - 事件 MPM
- 该事件MPM的实验阶段,但现在完全支持。
- 异步支持
- 更好地支持异步读/写以支持 MPM 和平台。
- 每个模块和每个目录的 LogLevel 配置
- 在
LogLevel
现在可以按模块和每目录配置。新的水平trace1
,以trace8
已经在上面添加debug
日志级别。 - 每个请求的配置部分
<If>
、<ElseIf>
和<Else>
部分可用于根据每个请求标准设置配置。- 通用表达式解析器
- 新的表达式解析器允许在诸如、 、 、 等指令中使用通用语法 来指定 复杂的条件。
SetEnvIfExpr
RewriteCond
Header
<If>
- KeepAliveTimeout 以毫秒为单位
- 现在可以以
KeepAliveTimeout
毫秒为单位指定。 - NameVirtualHost 指令
- 不再需要,现已弃用。
- 覆盖配置
- 新
AllowOverrideList
指令允许更细粒度地控制.htaccess
文件中允许使用哪些指令。 - 配置文件变量
- 现在可以
Define
在配置中使用变量,如果在配置中的许多地方使用相同的值,则可以更清晰地表示。 - 减少内存使用
- 尽管有许多新特性,2.4.x 往往比 2.2.x 使用更少的内存。
新模块
mod_proxy_fcgi
- FastCGI 协议后端
mod_proxy
mod_proxy_scgi
- SCGI 协议后端
mod_proxy
mod_proxy_express
- 提供动态配置的大量反向代理
mod_proxy
mod_remoteip
- 将请求的明显客户端远程 IP 地址和主机名替换为代理或负载均衡器通过请求标头提供的 IP 地址列表。
mod_heartmonitor
,mod_lbmethod_heartbeat
- 允许
mod_proxy_balancer
根据后端服务器上的活动连接数做出负载平衡决策。 mod_proxy_html
- 以前是第三方模块,它支持在反向代理情况下修复 HTML 链接,其中后端生成对代理客户端无效的 URL。
mod_sed
- , 的高级替换
mod_substitute
允许使用 sed 的全部功能编辑响应主体。 mod_auth_form
- 启用基于表单的身份验证。
mod_session
- 使用 cookie 或数据库存储为客户端启用会话状态。
mod_allowmethods
- 用于限制某些 HTTP 方法而不干扰身份验证或授权的新模块。
mod_lua
- 将Lua语言嵌入到 httpd 中,用于配置和小型业务逻辑功能。(实验性)
mod_log_debug
- 允许在请求处理的不同阶段添加可自定义的调试日志记录。
mod_buffer
- 提供缓冲输入和输出过滤器堆栈
mod_data
- 将响应正文转换为 RFC2397 数据 URL
mod_ratelimit
- 为客户端提供带宽速率限制
mod_request
- 提供过滤器来处理和提供可用的 HTTP 请求正文
mod_reflector
- 通过输出过滤器堆栈提供请求正文的反射作为响应。
mod_slotmem_shm
- 提供基于 Slot 的共享内存提供程序(ala the scoreboard)。
mod_xml2enc
- 以前是第三方模块,它支持基于 libxml2(标记感知)过滤器模块的国际化。
mod_macro
(自 2.4.5 起可用)- 在配置文件中提供宏。
mod_proxy_wstunnel
(自 2.4.5 起可用)- 支持网络套接字隧道。
mod_authnz_fcgi
(自 2.4.10 起可用)- 启用 FastCGI 授权方应用程序来验证和/或授权客户端。
mod_http2
(自 2.4.17 起可用)- 支持 HTTP/2 传输层。
mod_proxy_http2
(自 2.4.19 起可用)- HTTP/2 协议后端用于
mod_proxy
mod_proxy_hcheck
(自 2.4.21 起可用)- 支持远程代理后端服务器的独立动态健康检查。
mod_brotli
(自 2.4.26 起可用)- 支持 Brotli 压缩算法。
mod_md
(自 2.4.30 起可用)- 支持 ACME 协议,实现证书自动配置。
mod_proxy_uwsgi
(自 2.4.30 起可用)- .UWSGI 网关模块
mod_proxy
。 mod_socache_redis
(自 2.4.39 起可用)- 支持基于Redis的共享对象缓存提供程序。
mod_systemd
(自 2.4.42 起可用)- 系统集成。它允许在带有 systemd 的服务中使用 httpd
Type=notify
。
模块增强
mod_ssl
mod_ssl
现在可以配置为使用 OCSP 服务器来检查客户端证书的验证状态。默认响应者是可配置的,以及是否首选客户端证书中指定的响应者的决定。mod_ssl
现在还支持 OCSP 装订,其中服务器主动获取其证书的 OCSP 验证,并在握手期间将其传输到客户端。mod_ssl
现在可以配置为通过 memcached 在服务器之间共享 SSL 会话数据- 除了 RSA 和 DSA 之外,现在还支持 EC 密钥。
- 支持 TLS-SRP(在 2.4.4 及更高版本中可用)。
mod_proxy
- 该
ProxyPass
指令现在在Location
orLocationMatch
块中进行了最佳配置 ,并且在大量出现时提供了比传统双参数语法显着的性能优势。 - 用于代理请求的源地址现在是可配置的。
- 支持到后端的 Unix 域套接字(在 2.4.7 及更高版本中可用)。
mod_proxy_balancer
- 通过 balancer-manager 对 BalancerMembers 进行更多运行时配置更改
- 可以在运行时通过 balancer-manager 添加额外的 BalancerMembers
- Balancer 参数子集的运行时配置
- BalancerMembers 可以设置为“Drain”,以便它们只响应现有的粘性会话,允许它们优雅地脱机。
- 重新启动后平衡器设置可以保持不变。
mod_cache
- 该
mod_cache
CACHE滤波器可以在所述过滤器链中的给定点可以任选插入,以提供对高速缓存精细控制。 mod_cache
现在可以缓存 HEAD 请求。- 在可能的情况下,
mod_cache
现在可以为每个目录而不是每个服务器设置指令。 - 可以自定义缓存 URL 的基本 URL,以便缓存集群可以共享相同的端点 URL 前缀。
mod_cache
现在能够在后端不可用时提供陈旧的缓存数据(错误 5xx)。mod_cache
现在可以将 HIT/MISS/REVALIDATE 插入 X-Cache 标头中。mod_include
- 支持 'include' 元素中的 'onerror' 属性,允许在出现错误时提供错误文档而不是默认错误字符串。
mod_cgi
,mod_include
,mod_isapi
, ...- 标头到环境变量的转换比以前更严格,以通过标头注入减轻一些可能的跨站点脚本攻击。包含无效字符(包括下划线)的标题名称不再转换为环境变量。Apache 中的环境变量有一些关于如何解决需要此类标头的损坏的旧客户端的指示。(这会影响所有使用这些环境变量的模块。)
mod_authz_core
授权逻辑容器- 现在可以使用
Require
指令和相关的容器指令(例如<RequireAll>
. mod_rewrite
mod_rewrite
添加[QSD]
(Query String Discard) 和[END]
标志RewriteRule
以简化常见的重写场景。- 添加了在
RewriteCond
. - 允许将 SQL 查询用作
RewriteMap
函数。 mod_ldap
,mod_authnz_ldap
mod_authnz_ldap
添加对嵌套组的支持。mod_ldap
在处理超时方面添加了LDAPConnectionPoolTTL
、LDAPTimeout
和其他改进。这对于有状态防火墙丢弃与 LDAP 服务器的空闲连接的设置特别有用。mod_ldap
将LDAPLibraryDebug
使用的 LDAP 工具包提供的调试信息添加 到日志中。mod_info
mod_info
现在可以在服务器启动期间将预解析的配置转储到标准输出。mod_auth_basic
- 用于伪造基本身份验证的新通用机制(在 2.4.5 及更高版本中可用)。
程序增强
fcgistarter
- 新的 FastCGI 守护程序启动实用程序
htcacheclean
- 现在可以列出当前缓存的 URL,包括可选的元数据。
- 允许从缓存中显式删除单个缓存的 URL。
- 文件大小现在可以四舍五入到给定的块大小,使大小限制更接近于磁盘上的实际大小。
- 缓存大小现在可以受 inode 数量的限制,而不是受磁盘上文件大小的限制。
rotatelogs
- 现在可以创建指向当前日志文件的链接。
- 现在可以调用自定义旋转后脚本。
htpasswd
,htdbm
- 支持 bcrypt 算法(在 2.4.4 及更高版本中可用)。
文档
- mod_rewrite
- 该
mod_rewrite
文档已重新排列并几乎完全重写,重点是示例和常见用法,以及向您展示其他解决方案何时更合适。该重写指南现在有更多的细节和更好的组织的顶层部分。 - mod_ssl
- 该
mod_ssl
文档已大大增强,与更多的例子在入门级别,除了过去注重技术细节。 - 缓存指南
- 该缓存指南已经被改写为RFC2616 HTTP / 1.1缓存由提供的特征正确区分
mod_cache
,并通过所提供的类属键/值缓存socache 接口,以及到专门盖通过了高速缓存,等机制提供mod_file_cache
。
模块开发人员更改
- 添加检查配置挂钩
- 添加了一个新的钩子 ,
check_config
它在pre_config
和open_logs
钩子之间运行。它test_config
在-t
选项传递到 时,它也会在钩子之前运行httpd
。该check_config
钩子允许模块查看相互依赖的配置指令值并调整它们,同时消息仍然可以记录到控制台。因此,在核心open_logs
钩子函数将控制台输出重定向到错误日志之前,用户可以收到错误配置问题的警报。 - 添加了表达式解析器
- 我们现在有一个通用表达式解析器,它的 API 在ap_expr.h中公开。这改编自先前在 中实现的表达式解析器
mod_ssl
。 - 授权逻辑容器
- 授权模块现在通过 ap_register_auth_provider() 注册为提供者,以支持高级授权逻辑,例如
<RequireAll>
. - 小对象缓存接口
- 该ap_socache.h头暴露用于缓存较小的数据对象,基于先前实施的基于提供程序的接口
mod_ssl
会话缓存。当前支持使用共享内存循环缓冲区、基于磁盘的 dbm 文件和 memcache 分布式缓存的提供程序。 - 添加了缓存状态挂钩
- 该
mod_cache
模块现在包含一个新的cache_status
钩子,当知道缓存决定时会调用它。提供了一个默认实现,它向响应添加了一个可选的X-Cache
和X-Cache-Detail
标头。