Apache HTTP Server 2.4 中的新功能概述

本文档描述了 Apache HTTP Server 2.2 和 2.4 版本之间的一些主要更改。有关自 2.0 版以来的新功能,请参阅2 .2 新功能文档。

Core Enhancements

  • 运行时可加载的 MPM

  • Event MPM

    • Event MPM不再是实验性的,但现已得到完全支持。
  • Asynchronous support

    • 更好地支持异步读/写,以支持 MPM 和平台。
  • 每个模块和每个目录的 LogLevel 配置

    • 现在可以按模块和目录配置LogLevel。在debug日志级别之上添加了新级别trace1trace8
  • 每个请求的配置部分

  • 通用表达式解析器

  • KeepAliveTimeout(以毫秒为单位)

  • NameVirtualHost directive

    • 不再需要,现在已弃用。
  • Override Configuration

    • 新的AllowOverrideList指令允许更精细地控制.htaccess文件中允许使用哪些指令。
  • 配置文件变量

    • 现在可以在配置中使用Define个变量,如果在配置中的许多位置使用了相同的值,则可以更清楚地表示。
  • 减少内存使用

    • 尽管有许多新功能,但 2.4.x 往往比 2.2.x 使用更少的内存。

New Modules

  • mod_proxy_fcgi

  • mod_proxy_scgi

  • mod_proxy_express

    • mod_proxy提供动态配置的大量反向代理
  • mod_remoteip

    • 使用代理或负载平衡器通过请求 Headers 提供的 IP 地址列表替换请求的明显的 Client 端远程 IP 地址和主机名。
  • mod_heartmonitor, mod_lbmethod_heartbeat

    • 允许mod_proxy_balancer将负载均衡决策基于后端服务器上的活动连接数。
  • mod_proxy_html

    • 以前是第三方模块,它支持在反向代理情况下修复 HTML 链接,在这种情况下,后端生成的 URL 对代理的 Client 端无效。
  • mod_sed

    • mod_substitute的高级替换允许使用 sed 的全部功能编辑响应正文。
  • mod_auth_form

    • 启用基于表单的身份验证。
  • mod_session

    • 使用 cookie 或数据库存储为 Client 端启用会话状态使用。
  • mod_allowmethods

    • 新模块,用于限制某些 HTTP 方法而不会干扰身份验证或授权。
  • mod_lua

    • Lua语言嵌入到 httpd 中,以进行配置和小型企业逻辑功能。 (实验性)
  • mod_log_debug

    • 允许在请求处理的不同阶段添加可自定义的调试日志记录。
  • mod_buffer

    • 提供缓冲 Importing 和输出滤波器堆栈
  • mod_data

    • 将响应主体转换为 RFC2397 数据 URL
  • mod_ratelimit

    • 为 Client 端提供带宽速率限制
  • mod_request

    • 提供过滤器以处理和提供 HTTP 请求正文
  • mod_reflector

    • 通过输出过滤器堆栈将请求主体的反射作为响应提供。
  • mod_slotmem_shm

    • 提供基于插槽的共享内存提供程序(例如记分板)。
  • mod_xml2enc

    • 它以前是第三方模块,它支持基于 libxml2(可识别标记)的过滤器模块中的国际化。
  • mod_macro(自 2.4.5 起可用)

    • 在配置文件中提供宏。
  • mod_proxy_wstunnel(自 2.4.5 起可用)

    • 支持网络套接字隧道。
  • mod_authnz_fcgi(自 2.4.10 起可用)

    • 启用 FastCGI 授权者应用程序以认证和/或授权 Client 端。
  • mod_http2(自 2.4.17 起可用)

    • 支持 HTTP/2 传输层。
  • mod_proxy_http2(自 2.4.19 起可用)

  • mod_proxy_hcheck(自 2.4.21 开始可用)

    • 支持对远程代理后端服务器进行独立的动态运行状况检查。
  • mod_brotli(自 2.4.26 起可用)

    • 支持 Brotli 压缩算法。
  • mod_md(自 2.4.30 起可用)

    • 支持 ACME 协议以自动进行证书配置。
  • mod_socache_redis(自 2.4.39 起可用)

    • 支持基于Redis的共享对象缓存提供程序。
  • mod_systemd(自 2.4.42 起可用)

    • 系统集成。它允许将 httpd 与 systemd Type=notify一起用于服务。

Module Enhancements

  • mod_ssl

    • 现在可以将mod_ssl配置为使用 OCSP 服务器来检查 Client 端证书的验证状态。默认响应者是可配置的,还可以决定是否更喜欢 Client 端证书本身中指定的响应者。

    • mod_ssl现在还支持 OCSP 装订,即服务器主动获取其证书的 OCSP 验证,并在握手期间将其传输给 Client 端。

    • 现在可以将mod_ssl配置为通过 memcached 在服务器之间共享 SSL 会话数据

    • 除了 RSA 和 DSA,现在还支持 EC 密钥。

    • 支持 TLS-SRP(在 2.4.4 及更高版本中可用)。

  • mod_proxy

    • 现在,在LocationLocationMatch块中最优化地配置了ProxyPass指令,与大量的传统两参数语法相比,它具有明显的性能优势。

    • 现在可以配置用于代理请求的源地址。

    • 支持到后端的 Unix 域套接字(在 2.4.7 和更高版本中可用)。

  • mod_proxy_balancer

    • 通过 balancer-manager 对 BalancerMembers 进行更多的运行时配置更改

    • 可以在运行时通过 balancer-manager 添加其他 BalancerMembers

    • 平衡器参数子集的运行时配置

    • 可以将 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 Headers 中。

  • mod_include

    • 支持'include'元素内的'onerror'属性,允许将错误文档提供给错误文档,而不是默认错误字符串。
  • mod_cgi, mod_include, mod_isapi, ...

    • 将 Headers 转换为环境变量比以前更加严格,以通过 Headers 注入减轻某些可能的跨站点脚本攻击。包含无效字符(包括下划线)的标题名称将不再转换为环境变量。 Apache 中的环境变量针对如何处理需要此类 Headers 的残旧 Client 提供了一些指导。 (这会影响使用这些环境变量的所有模块.)
  • mod_authz_core授权逻辑容器

    • 现在可以使用Require指令和相关的容器指令(例如<RequireAll>)来指定高级授权逻辑。
  • mod_rewrite

    • mod_rewriteRewriteRule添加[QSD](查询字符串丢弃)和[END]标志,以简化常见的重写方案。

    • 增加了在RewriteCond中使用复杂的布尔表达式的可能性。

    • 允许将 SQL 查询用作RewriteMap函数。

  • mod_ldap, mod_authnz_ldap

  • mod_info

    • mod_info现在可以在服务器启动期间将预先解析的配置转储到 stdout。
  • mod_auth_basic

    • 伪造基本身份验证的新通用机制(在 2.4.5 和更高版本中可用)。

Program Enhancements

  • fcgistarter

    • 新的 FastCGI 守护程序启动器 Util
  • htcacheclean

    • 现在可以列出当前缓存的 URL,包括可选的元数据。

    • 允许从缓存中显式删除单个缓存的 URL。

    • 现在可以将文件大小四舍五入到给定的块大小,从而使大小限制更接近于磁盘上的实际大小。

    • 缓存大小现在可以由索引节点的数量来限制,而不是由磁盘上文件的大小来限制或附加。

  • rotatelogs

    • 现在可以创建指向当前日志文件的链接。

    • 现在可以调用自定义的旋转后脚本。

  • htpasswd, htdbm

    • 支持 bcrypt 算法(在 2.4.4 和更高版本中可用)。

Documentation

  • mod_rewrite

    • mod_rewrite文档已重新排列并几乎完全被重写,着重于示例和常用用法,并向您展示了其他解决方案何时更合适。 Rewrite Guide现在是顶层部分,具有更多详细信息和更好的组织。
  • mod_ssl

    • mod_ssl文档已得到极大增强,除了以前侧重于技术细节之外,还提供了更多入门级别的示例。
  • Caching Guide

模块开发人员变更

  • 检查配置钩子已添加

    • 添加了一个新的钩子check_config,它在pre_configopen_logs钩子之间运行。当-t选项传递给httpd时,它也将在test_config钩子之前运行。 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-CacheX-Cache-DetailHeaders 添加到响应中。

开发人员文档包含API 更改的详细列表