<-
Apache > HTTP 服务器 > 文档 > 版本 2.4

从 2.2 升级到 2.4

可用语言:  en  |  fr 

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

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

本文档仅描述了从 2.2 到 2.4 的更改。如果您从 2.0 版本升级,还应查阅 2.0 到 2.2 升级文档。

Support Apache!

另请参阅

top

编译时配置更改

编译过程与 2.2 版本中使用的过程非常相似。您的旧 configure 命令行(如安装的服务器目录中的 build/config.nice 中所找到的)在大多数情况下都可以使用。默认设置有一些更改。更改的一些细节

top

运行时配置更改

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

授权

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

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

控制授权模块在不匹配已验证用户时如何响应的指令已被删除:这包括 AuthzLDAPAuthoritative、AuthzDBDAuthoritative、AuthzDBMAuthoritative、AuthzGroupFileAuthoritative、AuthzUserAuthoritative 和 AuthzOwnerAuthoritative。这些指令已被更具表现力的 RequireAnyRequireNoneRequireAll 取代。

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

访问控制

在 2.2 中,基于客户端主机名、IP 地址和客户端请求的其他特征的访问控制是使用指令 OrderAllowDenySatisfy 完成的。

在 2.4 中,这种访问控制与其他授权检查以相同的方式完成,使用新的模块 mod_authz_host。旧的访问控制习惯用法应该被新的身份验证机制取代,尽管为了与旧配置兼容,提供了新的模块 mod_access_compat

混合旧指令和新指令

混合使用旧指令(如 OrderAllowDeny)和新指令(如 Require)在技术上是可行的,但不建议这样做。 mod_access_compat 是为了支持仅包含旧指令的配置而创建的,以方便 2.4 升级。请查看下面的示例,以更好地了解可能出现的问题。

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

在此示例中,没有身份验证,所有请求都被拒绝。

2.2 配置

Order deny,allow
Deny from all

2.4 配置

Require all denied

在此示例中,没有身份验证,所有请求都被允许。

2.2 配置

Order allow,deny
Allow from all

2.4 配置

Require all granted

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

2.2 配置

Order Deny,Allow
Deny from all
Allow from example.org

2.4 配置

Require host example.org

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

混合使用旧指令和新指令:未按预期工作

DocumentRoot "/var/www/html"

<Directory "/">
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Location "/server-status">
    SetHandler server-status
    Require local
</Location>

access.log - GET /server-status 403 127.0.0.1
error.log - AH01797: client denied by server configuration: /var/www/html/server-status

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

相反,此示例按预期工作

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

DocumentRoot "/var/www/html"

<Directory "/">
    AllowOverride None
    Require all denied
</Directory>

<Location "/server-status">
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow From 127.0.0.1
</Location>

access.log - GET /server-status 200 127.0.0.1

因此,即使混合配置仍然可行,请在升级时尽量避免这样做:要么保留旧指令,然后在稍后阶段迁移到新指令,要么一次性迁移所有内容。

在许多具有身份验证的配置中,Satisfy 的值为默认的 ALL,因此简单地禁用基于主机的访问控制的代码段被省略了

2.2 配置

# 2.2 config that disables host-based access control and uses only authentication
Order Deny,Allow
Allow from all
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

2.4 配置

# No replacement of disabling host-based access control needed
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

在同时有意义地组合了身份验证和访问控制的配置中,应迁移访问控制指令。此示例允许满足 *两者* 条件的请求

2.2 配置

Order allow,deny
Deny from all
# Satisfy ALL is the default
Satisfy ALL
Allow from 127.0.0.1
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

2.4 配置

AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
<RequireAll>
  Require valid-user
  Require ip 127.0.0.1
</RequireAll>

在同时有意义地组合了身份验证和访问控制的配置中,应迁移访问控制指令。此示例允许满足 *任一* 条件的请求

2.2 配置

Order allow,deny
Deny from all
Satisfy any
Allow from 127.0.0.1
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

2.4 配置

AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
# Implicitly <RequireAny>
Require valid-user
Require ip 127.0.0.1

其他配置更改

如以下所述,某些其他配置可能需要进行一些小的调整。

top

其他更改

top

第三方模块

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

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

top

升级时常见的错误

可用语言:  en  |  fr 

top

评论

注意
这不是问答区。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/主题无关,可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表