]> granicus.if.org Git - apache/blob - docs/manual/upgrading.xml
Restore upgradind.xml after naming error.
[apache] / docs / manual / upgrading.xml
1 <?xml version='1.0' encoding='UTF-8' ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
4 <!-- $LastChangedRevision: 1686706 $ -->
5
6 <!--
7  Licensed to the Apache Software Foundation (ASF) under one or more
8  contributor license agreements.  See the NOTICE file distributed with
9  this work for additional information regarding copyright ownership.
10  The ASF licenses this file to You under the Apache License, Version 2.0
11  (the "License"); you may not use this file except in compliance with
12  the License.  You may obtain a copy of the License at
13
14      http://www.apache.org/licenses/LICENSE-2.0
15
16  Unless required by applicable law or agreed to in writing, software
17  distributed under the License is distributed on an "AS IS" BASIS,
18  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  See the License for the specific language governing permissions and
20  limitations under the License.
21 -->
22
23 <manualpage metafile="upgrading.xml.meta">
24
25 <title>Upgrading to 2.4 from 2.2</title>
26
27 <summary>
28   <p>In order to assist folks upgrading, we maintain a document
29   describing information critical to existing Apache HTTP Server users. These
30   are intended to be brief notes, and you should be able to find
31   more information in either the <a
32   href="new_features_2_4.html">New Features</a> document, or in
33   the <code>src/CHANGES</code> file.  Application and module developers
34   can find a summary of API changes in the <a href="developer/new_api_2_4.html"
35   >API updates</a> overview.</p>
36
37   <p>This document describes changes in server behavior that might
38   require you to change your configuration or how you use the server
39   in order to continue using 2.4 as you are currently using 2.2.
40   To take advantage of new features in 2.4, see the New Features
41   document.</p>
42
43   <p>This document describes only the changes from 2.2 to 2.4.  If you
44   are upgrading from version 2.0, you should also consult the <a
45   href="http://httpd.apache.org/docs/2.2/upgrading.html">2.0 to 2.2
46   upgrading document.</a></p>
47
48 </summary>
49 <seealso><a href="new_features_2_4.html">Overview of new features in
50   Apache HTTP Server 2.4</a></seealso>
51
52   <section id="compile-time">
53     <title>Compile-Time Configuration Changes</title>
54
55     <p>The compilation process is very similar to the one used in
56     version 2.2.  Your old <code>configure</code> command line (as
57     found in <code>build/config.nice</code> in the installed server
58     directory) can be used in most cases.  There are some changes in
59     the default settings.  Some details of changes:</p>
60
61     <ul>
62       <li>These modules have been removed: mod_authn_default,
63       mod_authz_default, mod_mem_cache.  If you were using
64       mod_mem_cache in 2.2, look at <module>mod_cache_disk</module> in
65       2.4.</li>
66
67       <li>All load balancing implementations have been moved to
68       individual, self-contained mod_proxy submodules, e.g.
69       <module>mod_lbmethod_bybusyness</module>.  You might need
70       to build and load any of these that your configuration
71       uses.</li>
72
73       <li>Platform support has been removed for BeOS, TPF, and
74       even older platforms such as A/UX, Next, and Tandem.  These were
75       believed to be broken anyway.</li>
76
77       <li>configure: dynamic modules (DSO) are built by default</li>
78
79       <li>configure: By default, only a basic set of modules is loaded. The
80       other <directive>LoadModule</directive> directives are commented
81       out in the configuration file.</li>
82
83       <li>configure: the "most" module set gets built by default</li>
84
85       <li>configure: the "reallyall" module set adds developer modules
86       to the "all" set</li>
87     </ul>
88
89   </section>
90
91   <section id="run-time">
92     <title>Run-Time Configuration Changes</title>
93     <p>There have been significant changes in authorization configuration,
94     and other minor configuration changes, that could require changes to your 2.2
95     configuration files before using them for 2.4.</p>
96
97     <section id="authz">
98       <title>Authorization</title>
99
100       <p>Any configuration file that uses authorization will likely
101       need changes.</p>
102
103     <p>You should review the <a href="howto/auth.html">Authentication,
104     Authorization and Access Control Howto</a>, especially the section
105     <a href="howto/auth.html#beyond">Beyond just authorization</a>
106     which explains the new mechanisms for controlling the order in
107     which the authorization directives are applied.</p>
108
109     <p>Directives that control how authorization modules respond when they don't match
110     the authenticated user have been removed: This includes
111     AuthzLDAPAuthoritative, AuthzDBDAuthoritative, AuthzDBMAuthoritative,
112     AuthzGroupFileAuthoritative, AuthzUserAuthoritative,
113     and AuthzOwnerAuthoritative.   These directives have been replaced by the
114     more expressive <directive module="mod_authz_core">RequireAny</directive>,
115     <directive module="mod_authz_core">RequireNone</directive>, and
116     <directive module="mod_authz_core">RequireAll</directive>.</p>
117
118     <p>If you use <module>mod_authz_dbm</module>, you must port your
119     configuration to use <code>Require dbm-group ...</code> in place
120     of <code>Require group ...</code>.</p>
121
122     <section id="access">
123       <title>Access control</title>
124
125       <p>In 2.2, access control based on client hostname, IP address,
126       and other characteristics of client requests was done using the
127       directives <directive
128       module="mod_access_compat">Order</directive>, <directive
129       module="mod_access_compat">Allow</directive>, <directive
130       module="mod_access_compat">Deny</directive>, and <directive
131       module="mod_access_compat">Satisfy</directive>.</p>
132
133       <p>In 2.4, such access control is done in the same way as other
134       authorization checks, using the new module
135       <module>mod_authz_host</module>.  The old access control idioms
136       should be replaced by the new authentication mechanisms,
137       although for compatibility with old configurations, the new
138       module <module>mod_access_compat</module> is provided.</p>
139
140       <p>Here are some examples of old and new ways to do the same
141       access control.</p>
142
143       <p>In this example, all requests are denied.</p>
144       <example>
145         <title>2.2 configuration:</title>
146         <highlight language="config">
147 Order deny,allow
148 Deny from all
149         </highlight>
150       </example>
151       <example>
152         <title>2.4 configuration:</title>
153         <highlight language="config">
154         Require all denied
155         </highlight>
156       </example>
157
158       <p>In this example, all requests are allowed.</p>
159       <example>
160         <title>2.2 configuration:</title>
161         <highlight language="config">
162 Order allow,deny
163 Allow from all
164         </highlight>
165       </example>
166       <example>
167         <title>2.4 configuration:</title>
168         <highlight language="config">
169         Require all granted
170         </highlight>
171       </example>
172
173       <p>In the following example, all hosts in the example.org domain
174       are allowed access; all other hosts are denied access.</p>
175
176       <example>
177         <title>2.2 configuration:</title>
178         <highlight language="config">
179 Order Deny,Allow
180 Deny from all
181 Allow from example.org
182         </highlight>
183       </example>
184       <example>
185         <title>2.4 configuration:</title>
186         <highlight language="config">
187         Require host example.org
188         </highlight>
189       </example>
190     </section>
191
192     </section>
193
194     <section id="config">
195       <title>Other configuration changes</title>
196
197       <p>Some other small adjustments may be necessary for particular
198       configurations as discussed below.</p>
199
200       <ul>
201         <li><directive>MaxRequestsPerChild</directive> has been renamed to
202         <directive module="mpm_common">MaxConnectionsPerChild</directive>,
203         describes more accurately what it does. The old name is still
204         supported.</li>
205
206         <li><directive>MaxClients</directive> has been renamed to
207         <directive module="mpm_common">MaxRequestWorkers</directive>,
208         which describes more accurately what it does. For async MPMs, like
209         <module>event</module>, the maximum number of clients is not
210         equivalent than the number of worker threads. The old name is still
211         supported.</li>
212
213         <li>The <directive module="core">DefaultType</directive>
214         directive no longer has any effect, other than to emit a
215         warning if it's used with any value other than
216         <code>none</code>.  You need to use other configuration
217         settings to replace it in 2.4.
218         </li>
219
220         <li><directive module="core">AllowOverride</directive> now
221         defaults to <code>None</code>.</li>
222
223         <li><directive module="core">EnableSendfile</directive> now
224         defaults to Off.</li>
225
226         <li><directive module="core">FileETag</directive> now
227         defaults to "MTime Size" (without INode).</li>
228
229         <li><module>mod_dav_fs</module>: The format of the <directive
230         module="mod_dav_fs">DavLockDB</directive> file has changed for
231         systems with inodes.  The old <directive
232         module="mod_dav_fs">DavLockDB</directive> file must be deleted on
233         upgrade.
234         </li>
235
236         <li><directive module="core">KeepAlive</directive> only
237         accepts values of <code>On</code> or <code>Off</code>.
238         Previously, any value other than "Off" or "0" was treated as
239         "On".</li>
240
241         <li>Directives AcceptMutex, LockFile, RewriteLock, SSLMutex,
242         SSLStaplingMutex, and WatchdogMutexPath have been replaced
243         with a single <directive module="core">Mutex</directive>
244         directive.  You will need to evaluate any use of these removed
245         directives in your 2.2 configuration to determine if they can
246         just be deleted or will need to be replaced using <directive
247         module="core">Mutex</directive>.</li>
248
249         <li><module>mod_cache</module>: <directive
250         module="mod_cache">CacheIgnoreURLSessionIdentifiers</directive>
251         now does an exact match against the query string instead of a
252         partial match.  If your configuration was using partial
253         strings, e.g. using <code>sessionid</code> to match
254         <code>/someapplication/image.gif;jsessionid=123456789</code>,
255         then you will need to change to the full string
256         <code>jsessionid</code>.
257         </li>
258
259         <li><module>mod_cache</module>: The second parameter to
260         <directive module="mod_cache">CacheEnable</directive> only
261         matches forward proxy content if it begins with the correct
262         protocol. In 2.2 and earlier, a parameter of '/' matched all
263         content.</li>
264
265         <li><module>mod_ldap</module>: <directive
266         module="mod_ldap">LDAPTrustedClientCert</directive> is now
267         consistently a per-directory setting only.  If you use this
268         directive, review your configuration to make sure it is
269         present in all the necessary directory contexts.</li>
270
271         <li><module>mod_filter</module>: <directive
272         module="mod_filter">FilterProvider</directive> syntax has changed and
273         now uses a boolean expression to determine if a filter is applied.
274         </li>
275
276         <li><module>mod_include</module>:
277             <ul>
278             <li>The <code>#if expr</code> element now uses the new <a
279             href="expr.html">expression parser</a>. The old syntax can be
280             restored with the new directive <directive module="mod_include"
281             >SSILegacyExprParser</directive>.
282             </li>
283             <li>An SSI* config directive in directory scope no longer causes
284             all other per-directory SSI* directives to be reset to their
285             default values.</li>
286             </ul>
287         </li>
288
289         <li><module>mod_charset_lite</module>: The <code>DebugLevel</code>
290         option has been removed in favour of per-module <directive
291         module="core">LogLevel</directive> configuration.
292         </li>
293
294         <li><module>mod_ext_filter</module>: The <code>DebugLevel</code>
295         option has been removed in favour of per-module <directive
296         module="core">LogLevel</directive> configuration.
297         </li>
298
299         <li><module>mod_proxy_scgi</module>: The default setting for
300         <code>PATH_INFO</code> has changed from httpd 2.2, and
301         some web applications will no longer operate properly with
302         the new <code>PATH_INFO</code> setting.  The previous setting
303         can be restored by configuring the <code>proxy-scgi-pathinfo</code>
304         variable.</li>
305
306         <li><module>mod_ssl</module>: CRL based revocation checking
307         now needs to be explicitly configured through <directive
308         module="mod_ssl">SSLCARevocationCheck</directive>.
309         </li>
310
311         <li><module>mod_substitute</module>: The maximum line length is now
312         limited to 1MB.
313         </li>
314
315         <li><module>mod_reqtimeout</module>: If the module is loaded, it
316         will now set some default timeouts.</li>
317
318         <li><module>mod_dumpio</module>: <directive>DumpIOLogLevel</directive>
319         is no longer supported.  Data is always logged at <directive
320         module="core">LogLevel</directive> <code>trace7</code>.</li>
321
322         <li>On Unix platforms, piped logging commands configured using
323         either <directive module="core">ErrorLog</directive> or
324         <directive module="mod_log_config">CustomLog</directive> were invoked using
325         <code>/bin/sh -c</code> in 2.2 and earlier.  In 2.4 and later,
326         piped logging commands are executed directly.  To restore the
327         old behaviour, see the <a href="logs.html#piped">piped logging
328         documentation</a>.</li>
329
330       </ul>
331     </section>
332   </section>
333
334   <section id="misc">
335     <title>Misc Changes</title>
336
337     <ul>
338       <li><module>mod_autoindex</module>: will now extract titles and
339       display descriptions for .xhtml files, which were previously
340       ignored.</li>
341
342       <li><module>mod_ssl</module>: The default format of the <code>*_DN</code>
343       variables has changed. The old format can still be used with the new
344       <code>LegacyDNStringFormat</code> argument to <directive
345       module="mod_ssl">SSLOptions</directive>. The SSLv2 protocol is
346       no longer supported. <directive module="mod_ssl">SSLProxyCheckPeerCN
347           </directive> and <directive module="mod_ssl">SSLProxyCheckPeerExpire
348           </directive> now default to On, causing proxy requests to HTTPS hosts
349           with bad or outdated certificates to fail with a 502 status code (Bad
350           gateway)</li>
351
352       <li><program>htpasswd</program> now uses MD5 hash by default on
353       all platforms.</li>
354
355       <li>The <directive module="core">NameVirtualHost</directive>
356       directive no longer has any effect, other than to emit a
357       warning.  Any address/port combination appearing in multiple
358       virtual hosts is implicitly treated as a name-based virtual host.
359       </li>
360
361       <li><module>mod_deflate</module> will now skip compression if it knows
362       that the size overhead added by the compression is larger than the data
363       to be compressed.
364       </li>
365
366       <li>Multi-language error documents from 2.2.x may not work unless
367       they are adjusted to the new syntax of <module>mod_include</module>'s
368       <code>#if expr=</code> element or the directive
369       <directive module="mod_include">SSILegacyExprParser</directive> is
370       enabled for the directory containing the error documents.
371       </li>
372
373       <li>The functionality provided by <code>mod_authn_alias</code>
374       in previous versions (i.e., the <directive
375       module="mod_authn_core">AuthnProviderAlias</directive> directive)
376       has been moved into <module>mod_authn_core</module>.
377       </li>
378
379       <li><module>mod_cgid</module> uses the servers <directive module="core"
380       >Timeout</directive> to limit the length of time to wait for CGI output.
381       This timeout can be overridden with <directive module="mod_cgid">
382       CGIDScriptTImeout</directive>.
383       </li>
384
385     </ul>
386
387   </section>
388
389   <section id="third-party">
390     <title>Third Party Modules</title>
391     <p>All modules must be recompiled for 2.4 before being loaded.</p>
392
393     <p>Many third-party modules designed for version 2.2 will
394     otherwise work unchanged with the Apache HTTP Server version 2.4.
395     Some will require changes; see the <a href="developer/new_api_2_4.html">API
396     update</a> overview.</p>
397   </section>
398
399   <section id="commonproblems">
400     <title>Common problems when upgrading</title>
401     <ul><li>Startup errors:
402     <ul>
403       <li><code>Invalid command 'User', perhaps misspelled or defined by a module not included in the server configuration</code> - load module <module>mod_unixd</module></li>
404       <li><code>Invalid command 'Require', perhaps misspelled or defined by a module not included in the server configuration</code>, or
405 <code>Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration</code>
406  - load module <module>mod_access_compat</module>, or update configuration to 2.4 authorization directives.</li>
407       <li><code>Ignoring deprecated use of DefaultType in line NN of /path/to/httpd.conf</code> - remove <directive module="core">DefaultType</directive>
408       and replace with other configuration settings.</li>
409       <li><code>Invalid command 'AddOutputFilterByType', perhaps misspelled
410       or defined by a module not included in the server configuration
411       </code> - <directive module="mod_filter">AddOutputFilterByType</directive>
412       has moved from the core to mod_filter, which must be loaded.</li>
413     </ul></li>
414     <li>Errors serving requests:
415     <ul>
416       <li><code>configuration error:  couldn't check user: /path</code> -
417       load module <module>mod_authn_core</module>.</li>
418       <li><code>.htaccess</code> files aren't being processed - Check for an
419       appropriate <directive module="core">AllowOverride</directive> directive;
420       the default changed to <code>None</code> in 2.4.</li>
421     </ul>
422     </li>
423 </ul>
424   </section>
425 </manualpage>