从2.2升级到2.4

为了帮助人们升级,我们维护一份描述对现有Apache HTTP Server用户至关重要的信息的文档。这些只是简要说明,您应该能够在新功能文档或src/CHANGES文件中找到更多信息。应用程序和模块开发人员可以在API更新概述中找到API更改的摘要。

本文档描述了服务器行为的变化,这些变化可能要求您更改配置或使用服务器以继续使用2.4,就像您当前使用2.2一样。要利用2.4中的新功能,请参阅新功能文档。

本文档仅描述了从2.2到2.4的变化。如果您从2.0版升级,则还应该查阅升级文档2.0至2.2。

最佳

编译时配置更改

编译过程非常类似于2.2版中使用的过程。大多数情况下,您的旧configure命令行(可以在build/config.nice安装的服务器目录中找到)可以使用。默认设置有一些变化。一些细节的变化:

  • 这些模块已被删除:mod_authn_default,mod_authz_default,mod_mem_cache。如果您在2.2中使用mod_mem_cache,请参阅mod_cache_disk2.4。
  • 所有的负载平衡实现已经被移动到独立的,独立的mod_proxy子模块,例如 mod_lbmethod_bybusyness。您可能需要构建并加载配置使用的任何这些内容。
  • BeOS,TPF以及A / UX,Next和Tandem等较早的平台都已取消平台支持。无论如何,这些被认为是破碎的。
  • 配置:动态模块(DSO)是默认生成的
  • 配置:默认情况下,只加载一组基本的模块。其他LoadModule指令在配置文件中被注释掉。
  • 配置:默认情况下,“最”模块集建成
  • 配置:“真正的”模块集将开发者模块添加到“全部”集
最佳

运行时配置更改

授权配置和其他次要配置更改发生了重大变化,可能需要在使用2.4配置文件之前对其进行更改。

授权

任何使用授权的配置文件都可能需要更改。

您应该查看身份验证,授权和访问控制Howto,尤其是Beyond仅授权部分,该部分 解释了控制授权指令应用顺序的新机制。

控制授权模块在与认证用户不匹配时如何响应的指令已被删除:这包括AuthzLDAPAuthoritative,AuthzDBDAuthoritative,AuthzDBMAuthoritative,AuthzGroupFileAuthoritative,AuthzUserAuthoritative和AuthzOwnerAuthoritative。这些指令已经被换成了更具表现力RequireAny, RequireNone和 RequireAll

如果您使用mod_authz_dbm,则必须移植您的配置以Require dbm-group ...代替使用Require group ...

访问控制

在2.2的基础上,客户端的主机名,IP地址,客户端请求的其他特性的访问控制使用的指示做OrderAllowDeny,和Satisfy

在2.4中,这种访问控制与使用新模块的其他授权检查相同 mod_authz_host。旧的访问控制成语应该被新的认证机制所取代,尽管为了与旧的配置兼容,mod_access_compat提供了新的模块。

混合旧的和新的指令

混合旧指令一样OrderAllowDeny以新的希望 Require在技术上是可行的,但不鼓励。mod_access_compat是为支持仅包含旧指令的配置而创建的,以促进2.4升级。请查看下面的示例以更好地了解可能出现的问题。

以下是一些新旧方法可用于执行相同访问控制的示例。

在这个例子中,没有认证,所有请求都被拒绝。

2.2配置:

2.4配置:

在这个例子中,没有认证,所有的请求都是允许的。

2.2配置:

2.4配置:

在以下示例中,不存在身份验证,并且example.org域中的所有主机都被允许访问; 所有其他主机都被拒绝访问。

2.2配置:

2.4配置:

在以下示例中,混合旧指令和新指令会导致意外的结果。

混合旧的和新的指令:不按预期工作

为什么即使配置似乎允许httpd拒绝访问服务器状态?因为mod_access_compat指令优先mod_authz_host于此配置 合并方案中的指令。

这个例子反过来按预期工作:

混合旧的和新的指令:按预期工作

因此,即使混音配置仍然可行,请在升级时尽量避免使用它:或者保留旧的指令,然后在后续阶段迁移到新的指令,或者只是批量迁移所有的指令。

在许多具有身份验证的配置中,其值为ALLSatisfy的缺省值,因此 省略了仅禁用基于主机的访问控制的片段:

2.2配置:

2.4配置:

在身份验证和访问控制有意义结合的配置中,应该迁移访问控制指令。这个例子允许满足两个标准的请求:

2.2配置:

2.4配置:

在身份验证和访问控制有意义结合的配置中,应该迁移访问控制指令。此示例允许符合以下任一条件的请求

2.2配置:

2.4配置:

其他配置更改

如下所述,对于特定配置可能需要其他一些小调整。

  • MaxRequestsPerChild已更名为 MaxConnectionsPerChild,更准确地描述了它的功能。旧名称仍然受支持。
  • MaxClients已被重新命名为 MaxRequestWorkers,它更准确地描述了它的功能。对于异步MPM,例如 event,最大客户端数量不等于工作线程数量。旧名称仍然受支持。
  • DefaultType 指令不再具有任何效果,除非发出警告,否则使用其他值 none。您需要使用其他配置设置在2.4中进行替换。
  • AllowOverride现在默认为None
  • EnableSendfile 现在默认为关闭。
  • FileETag 现在默认为“MTime Size”(没有INode)。
  • mod_dav_fsDavLockDB对于包含inode的系统,文件格式已更改。DavLockDB升级时必须删除旧文件。
  • KeepAlive只接受Onor的值Off。以前,除“关”或“0”以外的任何值都被视为“开”。
  • 指令AcceptMutex,LockFile,RewriteLock,SSLMutex,SSLStaplingMutex和WatchdogMutexPath已被替换为单个Mutex 指令。您需要评估2.2配置中这些已删除指令的使用情况,以确定它们是否可以被删除或需要使用替换Mutex
  • mod_cacheCacheIgnoreURLSessionIdentifiers 现在与查询字符串完全匹配,而不是部分匹配。如果您的配置使用了部分字符串,例如使用sessionid匹配 /someapplication/image.gif;jsessionid=123456789,那么您需要更改为完整字符串 jsessionid
  • mod_cacheCacheEnable如果以正确的协议开头,则第二个参数 仅匹配转发代理内容。在2.2及更早的版本中,’/’参数匹配所有内容。
  • mod_ldapLDAPTrustedClientCert现在一直只是按目录设置。如果您使用此指令,请检查您的配置以确保它存在于所有必需的目录环境中。
  • mod_filterFilterProvider语法已更改,现在使用布尔表达式来确定是否应用了过滤器。
  • mod_include
    • #if expr元素现在使用新的表达式分析器。旧的语法可以使用新的指令来恢复SSILegacyExprParser
    • 目录范围中的SSI * config指令不再导致所有其他每个目录的SSI *指令都被重置为默认值。
  • mod_charset_lite:该DebugLevel 选项已被删除,以支持每个模块的LogLevel配置。
  • mod_ext_filter:该DebugLevel 选项已被删除,以支持每个模块的LogLevel配置。
  • mod_proxy_scgi:默认设置 PATH_INFO已从httpd 2.2更改,并且一些Web应用程序将不再适用于新PATH_INFO设置。以前的设置可以通过配置proxy-scgi-pathinfo 变量来恢复。
  • mod_ssl:现在需要通过显式配置基于CRL的撤消检查SSLCARevocationCheck
  • mod_substitute:最大行长度现在限制为1MB。
  • mod_reqtimeout:如果模块已加载,它现在将设置一些默认超时。
  • mod_dumpioDumpIOLogLevel 不再支持。数据始终记录在LogLevel trace7
  • 在Unix平台上,使用2.2或更早版本配置的管道日志记录命令ErrorLog或者 CustomLog使用它们 /bin/sh -c。在2.4及更高版本中,直接执行管道日志记录命令。要恢复旧的行为,请参阅管道日志记录文档
最佳

其他变化

  • mod_autoindex:现在将为以前忽略的.xhtml文件提取标题和显示描述。
  • mod_ssl*_DN 变量的默认格式已更改。旧格式仍然可以与新 LegacyDNStringFormat参数一起使用SSLOptions。SSLv2协议不再受支持。SSLProxyCheckPeerCN 并且SSLProxyCheckPeerExpire 现在默认为开启,从而导致对具有错误或过期证书的HTTPS主机的代理请求失败并显示502状态码(错误网关)
  • htpasswd 现在在所有平台上默认使用MD5哈希。
  • NameVirtualHost 指令不再有任何效果,除了发出警告。出现在多个虚拟主机中的任何地址/端口组合都被隐式视为基于名称的虚拟主机。
  • mod_deflate 如果知道压缩所增加的开销大于要压缩的数据,现在将跳过压​​缩。
  • 从2.2.x的多语言错误的文档可能无法正常工作,除非它们被调整到新语法mod_include的 #if expr=元素或指令 SSILegacyExprParser针对包含错误的文件目录启用。
  • mod_authn_alias 以前版本(即AuthnProviderAlias指令)提供的功能已被移入mod_authn_core
  • RewriteLog和RewriteLogLevel指令已被删除。现在通过mod_rewrite使用LogLevel指令为模块配置适当的日志级别来提供此功能。另请参阅mod_rewrite日志记录 部分。
最佳

第三方模块

在加载之前,所有模块必须重新编译为2.4。

许多为版本2.2设计的第三方模块在Apache HTTP服务器版本2.4中将保持不变。有些需要改变; 请参阅API更新概述。

最佳

升级时常见的问题

  • 启动错误:
    • Invalid command 'User', perhaps misspelled or defined by a module not included in the server configuration – 加载模块 mod_unixd
    • Invalid command 'Require', perhaps misspelled or defined by a module not included in the server configuration或 Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration – 加载模块mod_access_compat或将配置更新为2.4授权指令。
    • Ignoring deprecated use of DefaultType in line NN of /path/to/httpd.conf– 删除DefaultType 并用其他配置设置替换。
    • Invalid command 'AddOutputFilterByType', perhaps misspelled or defined by a module not included in the server configuration – AddOutputFilterByType 已经从核心转移到了mod_filter,它必须被加载。
  • 提供请求的错误:
    • configuration error: couldn't check user: /path– 加载模块mod_authn_core
    • .htaccess文件没有被处理 – 检查一个合适的AllowOverride指令; 默认更改为None2.4。

 

from:http://httpd.apache.org/docs/2.4/upgrading.html