<-
Apache HTTP 服务器 2.4 > 从2.2升级到2.4

从2.2升级到2.4

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

本文档介绍了服务器行为的更改,这些更改可能要求您更改配置或使用服务器的方式,以便在当前使用2.2时继续使用2.4。要利用2.4中的新功能,请参阅“新功能”文档。

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

支持Apache!

也可以看看

最佳

编译时配置更改

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

最佳

运行时配置更改

授权配置中已进行了重大更改,而其他次要配置更改也可能需要更改2.2配置文件才能用于2.4。

授权书

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

您应该查看Authentication,Authorization和Access Control Howto,尤其是“ authorization”之外的部分 ,它解释了控制授权指令应用顺序的新机制。

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

如果使用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配置:

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

因此,即使仍然可以使用混合配置,在升级时也请尽量避免使用它:保留旧的指令,然后在以后迁移到新的指令,或者仅批量迁移所有指令。

在许多带有身份验证的配置中,其中的值SatisfyALL的默认值, 会省略那些仅禁用基于主机的访问控制的代码段:

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

其他配置更改

如下所述,某些其他小的调整对于特定配置可能是必需的。

最佳

杂项更改

最佳

第三方模块

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

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

最佳

升级时的常见问题

可用语言: zh  |  fr 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。