为了帮助人们进行升级,我们维护了一个文档,该文档描述了对现有Apache HTTP Server用户至关重要的信息。这些只是简要说明,您应该能够在“ 新功能”文档或src/CHANGES
文件中找到更多信息。应用程序和模块开发人员可以在API更新概述中找到API更改的摘要。
本文档介绍了服务器行为的更改,这些更改可能要求您更改配置或使用服务器的方式,以便在当前使用2.2时继续使用2.4。要利用2.4中的新功能,请参阅“新功能”文档。
本文仅描述从2.2到2.4的更改。如果要从版本2.0升级,则还应该查阅2.0到2.2的升级文档。
编译过程与2.2版中使用的过程非常相似。在大多数情况下,可以使用旧的configure
命令行(build/config.nice
在已安装的服务器目录中找到)。默认设置中有一些更改。更改的一些细节:
mod_cache_disk
在2.4中查看。mod_lbmethod_bybusyness
。您可能需要构建和加载配置中使用的任何这些。LoadModule
指令在配置文件中被注释掉。授权配置中已进行了重大更改,而其他次要配置更改也可能需要更改2.2配置文件才能用于2.4。
使用授权的任何配置文件都可能需要更改。
您应该查看Authentication,Authorization和Access Control Howto,尤其是“ authorization”之外的部分 ,它解释了控制授权指令应用顺序的新机制。
删除了控制授权模块在与身份验证的用户不匹配时如何响应的指令:这包括AuthzLDAPAuthoritative,AuthzDBDAuthoritative,AuthzDBMAuthoritative,AuthzGroupFileAuthoritative,AuthzUserAuthoritative和AuthzOwnerAuthoritative。这些指令已经被换成了更具表现力RequireAny
,
RequireNone
和
RequireAll
。
如果使用mod_authz_dbm
,则必须移植配置以Require dbm-group ...
代替使用Require group ...
。
在2.2的基础上,客户端的主机名,IP地址,客户端请求的其他特性的访问控制使用的指示做Order
,Allow
,Deny
,和Satisfy
。
在2.4中,使用新模块以与其他授权检查相同的方式完成这种访问控制
mod_authz_host
。尽管为了与旧配置兼容,mod_access_compat
提供了新模块,但旧的访问控制习惯用法应替换为新的身份验证机制。
从技术上讲,可以将旧指令(例如Order
)Allow
或Deny
新
指令(例如)混合使用,Require
但不建议这样做。mod_access_compat
被创建为支持仅包含旧指令的配置以促进2.4升级。请检查以下示例,以更好地了解可能出现的问题。
这是执行相同访问控制的旧方法和新方法的一些示例。
在此示例中,没有身份验证,并且所有请求都被拒绝。
Order deny,allow Deny from all
Require all denied
在此示例中,没有身份验证,并且所有请求都被允许。
Order allow,deny Allow from all
Require all granted
在以下示例中,不进行身份验证,并且example.org域中的所有主机都被允许访问;所有其他主机都被拒绝访问。
Order Deny,Allow Deny from all Allow from example.org
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 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
# No replacement of disabling host-based access control needed AuthType Basic AuthBasicProvider file AuthUserFile /example.com/conf/users.passwd AuthName secure Require valid-user
在将身份验证和访问控制都有意义地结合在一起的配置中,应该迁移访问控制指令。本示例允许满足以下两个条件的请求:
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
AuthType Basic AuthBasicProvider file AuthUserFile /example.com/conf/users.passwd AuthName secure <RequireAll> Require valid-user Require ip 127.0.0.1 </RequireAll>
在将身份验证和访问控制都有意义地结合在一起的配置中,应该迁移访问控制指令。本示例允许满足以下任一条件的请求:
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
AuthType Basic AuthBasicProvider file AuthUserFile /example.com/conf/users.passwd AuthName secure # Implicitly <RequireAny> Require valid-user Require ip 127.0.0.1
如下所述,某些其他小的调整对于特定配置可能是必需的。
MaxRequestsPerChild
已重命名为
MaxConnectionsPerChild
,可以更准确地描述其功能。仍然支持旧名称。MaxClients
已重命名为
MaxRequestWorkers
,可以更准确地描述其功能。对于异步MPM,例如
event
,最大客户端数不等于工作线程数。仍然支持旧名称。DefaultType
指令不再有效,除了与以外的其他任何值一起使用时会发出警告
none
。您需要使用其他配置设置将其替换为2.4。
AllowOverride
现在默认为None
。EnableSendfile
现在默认为关闭。FileETag
现在默认为“ MTime Size”(不带INode)。mod_dav_fs
:DavLockDB
对于具有inode的系统,文件格式已更改。DavLockDB
升级时必须删除旧文件。
KeepAlive
仅接受On
或的值Off
。以前,“ Off”或“ 0”以外的任何值都被视为“ On”。Mutex
指令。您将需要评估2.2配置中这些已删除指令的使用情况,以确定它们是否可以删除或是否需要使用替换Mutex
。mod_cache
:CacheIgnoreURLSessionIdentifiers
现在对查询字符串进行完全匹配,而不是部分匹配。如果您的配置使用的是部分字符串,例如使用sessionid
match
/someapplication/image.gif;jsessionid=123456789
,那么您将需要更改为完整的字符串
jsessionid
。
mod_cache
:第二个参数
CacheEnable
仅在以正确协议开头时才匹配转发代理内容。在2.2及更早版本中,参数'/'匹配所有内容。mod_ldap
:LDAPTrustedClientCert
现在始终是按目录设置。如果使用此伪指令,请检查您的配置以确保它存在于所有必要的目录上下文中。mod_filter
:FilterProvider
语法已更改,现在使用布尔表达式来确定是否应用了过滤器。
mod_include
:
#if expr
元素现在使用新的表达式解析器。可以使用新指令恢复旧语法SSILegacyExprParser
。
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_dumpio
:DumpIOLogLevel
不再受支持。数据始终记录在LogLevel
trace7
。ErrorLog
或
配置的管道记录命令在2.2及更早版本中CustomLog
使用调用
/bin/sh -c
。在2.4及更高版本中,管道记录命令直接执行。要恢复旧的行为,请参阅管道记录文档。mod_autoindex
:现在将提取标题并显示.xhtml文件的描述,这些文件以前已被忽略。mod_ssl
:*_DN
变量的默认格式已更改。旧格式仍可与的新
LegacyDNStringFormat
参数一起使用SSLOptions
。不再支持SSLv2协议。SSLProxyCheckPeerCN
并且SSLProxyCheckPeerExpire
现在默认为“开”,导致对具有错误或过期证书的HTTPS主机的代理请求失败,并带有502状态代码(错误网关)htpasswd
现在默认在所有平台上使用MD5哈希。NameVirtualHost
指令除了发出警告外,不再具有任何作用。出现在多个虚拟主机中的任何地址/端口组合都被隐式视为基于名称的虚拟主机。
mod_deflate
如果知道压缩所增加的大小开销大于要压缩的数据,现在将跳过压缩。
mod_include
的
#if expr=
元素或指令
SSILegacyExprParser
针对包含错误的文件目录启用。
mod_authn_alias
先前版本中提供的功能(即AuthnProviderAlias
伪指令)已移入mod_authn_core
。
mod_rewrite
使用LogLevel
指令为模块配置适当的日志记录级别来提供此功能。另请参见mod_rewrite日志记录
部分。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
-load module 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
指令;默认值更改为None
2.4。