为了帮助人们升级,我们维护一份描述对现有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_cache_disk
2.4。mod_lbmethod_bybusyness
。您可能需要构建并加载配置使用的任何这些内容。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地址,客户端请求的其他特性的访问控制使用的指示做Order
,Allow
,Deny
,和Satisfy
。
在2.4中,这种访问控制与使用新模块的其他授权检查相同 mod_authz_host
。旧的访问控制成语应该被新的认证机制所取代,尽管为了与旧的配置兼容,mod_access_compat
提供了新的模块。
混合旧指令一样Order
,Allow
或Deny
以新的希望 Require
在技术上是可行的,但不鼓励。mod_access_compat
是为支持仅包含旧指令的配置而创建的,以促进2.4升级。请查看下面的示例以更好地了解可能出现的问题。
以下是一些新旧方法可用于执行相同访问控制的示例。
在这个例子中,没有认证,所有请求都被拒绝。
1 2 |
<span class="kwd">顺序</span><span class="pln">否认</span><span class="pun">,</span><span class="pln">允许 </span><span class="pln">所有人</span><span class="kwd">拒绝</span> |
1 |
<span class="kwd">要求</span><span class="pln">全部拒绝</span> |
在这个例子中,没有认证,所有的请求都是允许的。
1 2 |
<span class="kwd">订单</span><span class="pln">允许</span><span class="pun">,</span><span class="pln">拒绝 </span><span class="pln">全部</span><span class="kwd">允许</span> |
1 |
<span class="kwd">要求</span><span class="pln">所有授予</span> |
在以下示例中,不存在身份验证,并且example.org域中的所有主机都被允许访问; 所有其他主机都被拒绝访问。
1 2 |
<span class="kwd">为了</span><span class="kwd">拒绝</span><span class="pun">,</span><span class="kwd">允许</span><span class="kwd">拒绝</span><span class="pln">所有 </span><span class="kwd">允许</span><span class="pln">从例子</span><span class="pun">。</span><span class="pln">组织</span> |
1 |
<span class="kwd">要求</span><span class="pln">主机示例</span><span class="pun">。</span><span class="pln">组织</span> |
在以下示例中,混合旧指令和新指令会导致意外的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="kwd">DocumentRoot </span><span class="str">“/ var / www / html”</span> <span class="pun">< </span><span class="tag">目录</span><span class="str">“/” </span><span class="pun">> </span><span class="kwd">AllowOverride </span><span class="typ">无</span><span class="kwd">顺序</span><span class="pln">拒绝</span><span class="pun">,</span><span class="pln">允许 </span><span class="kwd">拒绝</span><span class="pln">所有 </span><span class="pun"></ </span><span class="tag">Directory </span><span class="pun">></span> <span class="pun">< </span><span class="tag">Location </span><span class="str">> / server-status“ </span><span class="pun">> </span><span class="kwd">SetHandler </span><span class="pln">服务器状态 </span><span class="kwd">需要</span><span class="pln">本地 </span><span class="pun"></ </span><span class="tag">Location </span><span class="pun">></span> <span class="pln"> 访问</span><span class="pun">。</span><span class="pln">日志</span><span class="pun">- </span><span class="pln">GET </span><span class="pun">/ </span><span class="pln">服务器状态</span><span class="lit">403 </span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1 </span><span class="pln"> 错误</span><span class="pun">。</span><span class="pln">日志</span><span class="pun">- </span><span class="pln">AH01797 </span><span class="pun">:</span><span class="pln">客户端被服务器配置拒绝</span><span class="pun">:</span><span class="pun">/ </span><span class="pln">var </span><span class="pun">/ </span><span class="pln">www </span><span class="pun">/ </span><span class="pln">html </span><span class="pun">/ </span><span class="pln">server-status</span> |
为什么即使配置似乎允许httpd拒绝访问服务器状态?因为mod_access_compat
指令优先mod_authz_host
于此配置 合并方案中的指令。
这个例子反过来按预期工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="kwd">DocumentRoot </span><span class="str">“/ var / www / html”</span> <span class="pun">< </span><span class="tag">目录</span><span class="str">“/” </span><span class="pun">> </span><span class="kwd">AllowOverride </span><span class="typ">无</span><span class="kwd">要求</span><span class="pln">全部被拒绝 </span><span class="pun"></ </span><span class="tag">Directory </span><span class="pun">></span> <span class="pun">< </span><span class="tag">Location </span><span class="str">> / server-status“ </span><span class="pun">> </span><span class="kwd">SetHandler </span><span class="pln">server-status </span><span class="kwd">命令</span><span class="pln">拒绝</span><span class="pun">,</span><span class="pln">允许 </span><span class="kwd">拒绝</span><span class="pln">所有 </span><span class="kwd">Allow </span><span class="typ">From </span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1 </span><span class="pun"></ </span><span class="tag">Location </span><span class="pun">></span> <span class="pln"> 访问</span><span class="pun">。</span><span class="pln">日志</span><span class="pun">- </span><span class="pln">GET </span><span class="pun">/ </span><span class="pln">服务器状态</span><span class="lit">200 </span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1</span> |
因此,即使混音配置仍然可行,请在升级时尽量避免使用它:或者保留旧的指令,然后在后续阶段迁移到新的指令,或者只是批量迁移所有的指令。
在许多具有身份验证的配置中,其值为ALLSatisfy
的缺省值,因此 省略了仅禁用基于主机的访问控制的片段:
1 2 3 4 5 |
<span class="com">#2.2 config禁用基于主机的访问控制并仅使用认证</span><span class="kwd">Order </span><span class="kwd">Deny </span><span class="pun">,</span><span class="kwd">Allow </span><span class="kwd">Allow </span><span class="pln">from all </span><span class="kwd">AuthType </span><span class="typ">Basic </span><span class="kwd">AuthBasicProvider </span><span class="pln">文件 </span><span class="kwd">AuthUserFile </span><span class="pun">/ </span><span class="pln">example </span><span class="pun">。</span><span class="pln">com </span><span class="pun">/ </span><span class="pln">conf </span><span class="pun">/ </span><span class="pln">users </span><span class="pun">。</span><span class="pln">passwd </span><span class="kwd">AuthName </span><span class="pln">secure </span><span class="kwd">需要</span><span class="pln">有效用户</span> |
1 2 3 4 |
<span class="com">#不需要替代所需的禁用基于主机的访问控制</span><span class="kwd">AuthType </span><span class="typ">基本</span><span class="kwd">AuthBasicProvider </span><span class="pln">文件 </span><span class="kwd">AuthUserFile </span><span class="pun">/ </span><span class="pln">示例</span><span class="pun">。</span><span class="pln">com </span><span class="pun">/ </span><span class="pln">conf </span><span class="pun">/ </span><span class="pln">users </span><span class="pun">。</span><span class="pln">passwd </span><span class="kwd">AuthName </span><span class="pln">secure </span><span class="kwd">需要</span><span class="pln">有效用户</span> |
在身份验证和访问控制有意义结合的配置中,应该迁移访问控制指令。这个例子允许满足两个标准的请求:
1 2 3 4 5 6 7 |
<span class="kwd">为了</span><span class="pln">允许</span><span class="pun">,</span><span class="pln">拒绝 </span><span class="kwd">拒绝</span><span class="pln">所有 </span><span class="com">#满足所有是默认的</span><span class="kwd">手托</span><span class="pln">ALL </span><span class="kwd">允许</span><span class="pln">从</span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1 </span><span class="kwd">AuthType </span><span class="typ">基本</span><span class="kwd">AuthBasicProvider </span><span class="pln">文件 </span><span class="kwd">AuthUserFile </span><span class="pun">/ </span><span class="pln">示例</span><span class="pun">。</span><span class="pln">com </span><span class="pun">/ </span><span class="pln">conf </span><span class="pun">/ </span><span class="pln">users </span><span class="pun">。</span><span class="pln">passwd </span><span class="kwd">AuthName </span><span class="pln">secure </span><span class="kwd">需要</span><span class="pln">有效用户</span> |
1 2 3 4 5 |
<span class="kwd">AuthType </span><span class="typ">基本</span><span class="kwd">AuthBasicProvider </span><span class="pln">文件 </span><span class="kwd">AuthUserFile </span><span class="pun">/ </span><span class="pln">示例</span><span class="pun">。</span><span class="pln">com </span><span class="pun">/ </span><span class="pln">conf </span><span class="pun">/ </span><span class="pln">users </span><span class="pun">。</span><span class="pln">passwd </span><span class="kwd">AuthName </span><span class="pln">secure </span><span class="pun">< </span><span class="tag">RequireAll </span><span class="pun">> </span><span class="kwd">要求</span><span class="pln">valid-user </span><span class="kwd">要求</span><span class="pln">ip </span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1 </span><span class="pun"></ </span><span class="tag">RequireAll </span><span class="pun">></span> |
在身份验证和访问控制有意义结合的配置中,应该迁移访问控制指令。此示例允许符合以下任一条件的请求
1 2 3 4 5 6 7 |
<span class="kwd">订单</span><span class="pln">允许</span><span class="pun">,</span><span class="pln">拒绝 </span><span class="kwd">拒绝</span><span class="pln">从所有 </span><span class="kwd">满足</span><span class="pln">任何 </span><span class="kwd">允许</span><span class="pln">从</span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1 </span><span class="kwd">AuthType </span><span class="typ">基本</span><span class="kwd">AuthBasicProvider </span><span class="pln">文件 </span><span class="kwd">AuthUserFile </span><span class="pun">/ </span><span class="pln">示例</span><span class="pun">。</span><span class="pln">com </span><span class="pun">/ </span><span class="pln">conf </span><span class="pun">/ </span><span class="pln">users </span><span class="pun">。</span><span class="pln">passwd </span><span class="kwd">AuthName </span><span class="pln">secure </span><span class="kwd">需要</span><span class="pln">有效用户</span> |
1 2 3 4 5 |
<span class="kwd">AuthType </span><span class="typ">基本</span><span class="kwd">AuthBasicProvider </span><span class="pln">文件 </span><span class="kwd">AuthUserFile </span><span class="pun">/ </span><span class="pln">示例</span><span class="pun">。</span><span class="pln">com </span><span class="pun">/ </span><span class="pln">conf </span><span class="pun">/ </span><span class="pln">users </span><span class="pun">。</span><span class="pln">passwd </span><span class="kwd">AuthName </span><span class="pln">secure </span><span class="com">#隐式地<RequireAny> </span><span class="kwd">需要</span><span class="pln">有效用户 </span><span class="kwd">需要</span><span class="pln">IP </span><span class="lit">127.0 </span><span class="pun">。</span><span class="lit">0.1</span> |
如下所述,对于特定配置可能需要其他一些小调整。
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
or的值Off
。以前,除“关”或“0”以外的任何值都被视为“开”。Mutex
指令。您需要评估2.2配置中这些已删除指令的使用情况,以确定它们是否可以被删除或需要使用替换Mutex
。mod_cache
:CacheIgnoreURLSessionIdentifiers
现在与查询字符串完全匹配,而不是部分匹配。如果您的配置使用了部分字符串,例如使用sessionid
匹配 /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
或者 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
– 加载模块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。