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$ -->
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
14 http://www.apache.org/licenses/LICENSE-2.0
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.
23 <manualpage metafile="new_features_2_4.xml.meta">
25 <title>Overview of new features in Apache HTTP Server 2.4</title>
28 <p>This document describes some of the major changes between the
29 2.2 and 2.4 versions of the Apache HTTP Server. For new features since
30 version 2.0, see the <a href="new_features_2_2.html">2.2 new features</a>
35 <title>Core Enhancements</title>
37 <dt>Loadable MPMs</dt>
38 <dd>Multiple MPMs can now be built as loadable modules at compile time.
39 The MPM of choice can be configured at run time.</dd>
42 <dd>The Event MPM is no longer experimental but is now fully supported.</dd>
44 <dt>Asynchronous support</dt>
45 <dd>Better support for asynchronous read/write for supporting MPMs and
48 <dt>Per-module and per-directory LogLevel configuration</dt>
49 <dd>The <directive module="core">LogLevel</directive> can now be
50 configured per module and per directory. New levels <code>trace1</code>
51 to <code>trace8</code> have been added above the <code>debug</code> log
54 <dt>Per-request configuration sections</dt>
55 <dd><directive module="core" type="section">If</directive>,
56 <directive module="core" type="section">ElseIf</directive>,
57 and <directive module="core" type="section">Else</directive>
58 sections can be used to set the configuration based on per-request
61 <dt>General-purpose expression parser</dt>
62 <dd>A new expression parser allows to specify
63 <a href="expr.html">complex conditions</a> using a common syntax
65 <directive module="mod_setenvif">SetEnvIfExpr</directive>,
66 <directive module="mod_rewrite">RewriteCond</directive>,
67 <directive module="mod_headers">Header</directive>,
68 <directive module="core" type="section">If</directive>,
72 <dt>KeepAliveTimeout in milliseconds</dt>
73 <dd>It is now possible to specify <directive module="core"
74 >KeepAliveTimeout</directive> in milliseconds.
77 <dt>NameVirtualHost directive</dt>
78 <dd>No longer needed and is now deprecated.</dd>
80 <dt>Override Configuration</dt>
81 <dd>The new <directive module="core">AllowOverrideList</directive>
82 directive allows more fine grained control which directives are
83 allowed in <code>.htaccess</code> files. </dd>
85 <dt>Config file variables</dt>
86 <dd>It is now possible to <directive module="core">Define</directive>
87 variables in the configuration, allowing a clearer representation
88 if the same value is used at many places in the configuration.
91 <dt>Reduced memory usage</dt>
92 <dd>Despite many new features, 2.4.x tends to use less memory than
98 <section id="newmods">
99 <title>New Modules</title>
101 <dt><module>mod_proxy_fcgi</module></dt>
102 <dd>FastCGI Protocol backend for <module>mod_proxy</module></dd>
104 <dt><module>mod_proxy_scgi</module></dt>
105 <dd>SCGI Protocol backend for <module>mod_proxy</module></dd>
107 <dt><module>mod_proxy_express</module></dt>
108 <dd>Provides dynamically configured mass reverse proxies for
109 <module>mod_proxy</module></dd>
111 <dt><module>mod_remoteip</module></dt>
112 <dd>Replaces the apparent client remote IP address and hostname for the request
113 with the IP address list presented by a proxies or a load balancer via
114 the request headers.</dd>
116 <dt><module>mod_heartmonitor</module>,
117 <module>mod_lbmethod_heartbeat</module></dt>
118 <dd>Allow <module>mod_proxy_balancer</module> to base loadbalancing decisions
119 on the number of active connections on the backend servers.</dd>
121 <dt><module>mod_proxy_html</module></dt>
122 <dd>Formerly a third-party module, this supports fixing of HTML
123 links in a reverse proxy situation, where the backend generates
124 URLs that are not valid for the proxy's clients.</dd>
126 <dt><module>mod_sed</module></dt>
127 <dd>An advanced replacement of <module>mod_substitute</module>, allows
128 to edit the response body with the full power of sed.</dd>
130 <dt><module>mod_auth_form</module></dt>
131 <dd>Allows to do form-based authentication.</dd>
133 <dt><module>mod_session</module></dt>
134 <dd>Allows to keep session state for clients, using cookie or
135 database storage.</dd>
137 <dt><module>mod_allowmethods</module></dt>
138 <dd>New module to restrict certain HTTP methods without interfering with
139 authentication or authorization.</dd>
141 <dt><module>mod_lua</module></dt>
142 <dd>Embeds the <a href="http://www.lua.org/">Lua</a> language into httpd,
143 for configuration and small business logic functions. (Experimental)</dd>
145 <dt><module>mod_log_debug</module></dt>
146 <dd>Allows to add customizable debug logging at different phases of the
147 request processing.</dd>
149 <dt><module>mod_buffer</module></dt>
150 <dd>Provides for buffering the input and output filter stacks</dd>
152 <dt><module>mod_data</module></dt>
153 <dd>Convert response body into an RFC2397 data URL</dd>
155 <dt><module>mod_ratelimit</module></dt>
156 <dd>Provides Bandwidth Rate Limiting for Clients</dd>
158 <dt><module>mod_request</module></dt>
159 <dd>Provides Filters to handle and make available HTTP request bodies</dd>
161 <dt><module>mod_reflector</module></dt>
162 <dd>Provides Reflection of a request body as a response via the output filter stack.</dd>
164 <dt><module>mod_slotmem_shm</module></dt>
165 <dd>Provides a Slot-based shared memory provider (ala the scoreboard).</dd>
167 <dt><module>mod_xml2enc</module></dt>
168 <dd>Formerly a third-party module, this supports internationalisation
169 in libxml2-based (markup-aware) filter modules.</dd>
174 <section id="module">
175 <title>Module Enhancements</title>
177 <dt><module>mod_ssl</module></dt>
179 <dd><module>mod_ssl</module> can now be configured to use an
180 OCSP server to check the validation status of a client
181 certificate. The default responder is configurable, along with
182 the decision on whether to prefer the responder designated in
183 the client certificate itself.</dd>
185 <dd><module>mod_ssl</module> now also supports OCSP stapling, where the
186 server pro-actively obtains an OCSP verification of its certificate and
187 transmits that to the client during the handshake. </dd>
189 <dd><module>mod_ssl</module> can now be configured to share SSL Session
190 data between servers through memcached</dd>
192 <dd>EC keys are now supported in addition to RSA and DSA.</dd>
194 <dt><module>mod_proxy</module></dt>
196 <dd>The <directive module="mod_proxy">ProxyPass</directive> directive
197 is now most optimally configured within a
198 <directive module="core">Location</directive> or
199 <directive module="core">LocationMatch</directive>
200 block, and offers a significant performance advantage over the traditional
201 two-parameter syntax when present in large numbers.</dd>
202 <dd>The source address used for proxy requests is now configurable.</dd>
204 <dt><module>mod_proxy_balancer</module></dt>
206 <dd>More runtime configuration changes for BalancerMembers via balancer-manager</dd>
208 <dd>Additional BalancerMembers can be added at runtime via balancer-manager</dd>
210 <dd>Runtime configuration of a subset of Balancer parameters</dd>
212 <dd>BalancerMembers can be set to 'Drain' so that they only respond to existing sticky
213 sessions, allowing them to be taken gracefully offline.</dd>
215 <dd>Balancer settings can be persistent after restarts.</dd>
217 <dt><module>mod_cache</module></dt>
219 <dd>The <module>mod_cache</module> CACHE filter can be optionally inserted
220 at a given point in the filter chain to provide fine control over caching.
223 <dd><module>mod_cache</module> can now cache HEAD requests.</dd>
225 <dd>Where possible, <module>mod_cache</module> directives can now be set
226 per directory, instead of per server.</dd>
228 <dd>The base URL of cached URLs can be customised, so that a cluster of
229 caches can share the same endpoint URL prefix.</dd>
231 <dd><module>mod_cache</module> is now capable of serving stale cached
232 data when a backend is unavailable (error 5xx).</dd>
234 <dd><module>mod_cache</module> can now insert HIT/MISS/REVALIDATE into
235 an X-Cache header.</dd>
237 <dt><module>mod_include</module></dt>
238 <dd>Support for the 'onerror' attribute within an 'include' element,
239 allowing an error document to be served on error instead of the default
242 <dt><module>mod_cgi</module>, <module>mod_include</module>,
243 <module>mod_isapi</module>, ...</dt>
244 <dd>Translation of headers to environment variables is more strict than
245 before to mitigate some possible cross-site-scripting attacks via header
246 injection. Headers containing invalid characters (including underscores)
247 are now silently dropped. <a href="env.html">Environment Variables
248 in Apache</a> has some pointers on how to work around broken legacy
249 clients which require such headers. (This affects all modules which
250 use these environment variables.)</dd>
252 <dt><module>mod_authz_core</module> Authorization Logic Containers</dt>
254 <dd>Advanced authorization logic may now be specified using the
255 <directive module="mod_authz_core">Require</directive> directive
256 and the related container directives, such as
257 <directive module="mod_authz_core"
258 type="section">RequireAll</directive>.</dd>
260 <dt><module>mod_rewrite</module></dt>
261 <dd><module>mod_rewrite</module> adds the <code>[QSD]</code>
262 (Query String Discard) and <code>[END]</code> flags for
263 <directive module="mod_rewrite">RewriteRule</directive> to
264 simplify common rewriting scenarios.</dd>
265 <dd>Adds the possibility to use complex boolean expressions in <directive
266 module="mod_rewrite">RewriteCond</directive>.</dd>
267 <dd>Allows to use SQL queries as <directive
268 module="mod_rewrite">RewriteMap</directive> functions.</dd>
270 <dt><module>mod_ldap</module>, <module>mod_authnz_ldap</module></dt>
271 <dd><module>mod_authnz_ldap</module> adds support for nested groups.</dd>
272 <dd><module>mod_ldap</module> adds
273 <directive module="mod_ldap">LDAPConnectionPoolTTL</directive>,
274 <directive module="mod_ldap">LDAPTimeout</directive>, and
275 other improvements in the handling of timeouts.
276 This is especially useful for setups where a
277 stateful firewall drops idle connections to the LDAP server.</dd>
278 <dd><module>mod_ldap</module> adds
279 <directive module="mod_ldap">LDAPLibraryDebug</directive> to log
280 debug information provided by the used LDAP toolkit.</dd>
282 <dt><module>mod_info</module></dt>
283 <dd><module>mod_info</module> can now dump the pre-parsed configuration
284 to stdout during server startup.</dd>
290 <section id="programs">
291 <title>Program Enhancements</title>
294 <dd>New FastCGI deamon starter utility</dd>
296 <dt>htcacheclean</dt>
297 <dd>Current cached URLs can now be listed, with optional metadata
299 <dd>Allow explicit deletion of individual cached URLs from the
301 <dd>File sizes can now be rounded up to the given block size, making
302 the size limits map more closely to the real size on disk.</dd>
303 <dd>Cache size can now be limited by the number of inodes, instead
304 of or in addition to being limited by the size of the files on
308 <dd>May now create a link to the current log file.</dd>
309 <dd>May now invoke a custom post-rotate script.</dd>
313 <section id="documentation">
314 <title>Documentation</title>
317 <dd>The <module>mod_rewrite</module> documentation has been
318 rearranged and almost completely rewritten, with a focus on
319 examples and common usage, as well as on showing you when other
320 solutions are more appropriate. The <a href="rewrite/">Rewrite
321 Guide</a> is now a top-level section with much more detail and
322 better organization.</dd>
325 <dd>The <module>mod_ssl</module> documentation has been greatly
326 enhanced, with more examples at the getting started level, in
327 addition to the previous focus on technical details.</dd>
329 <dt>Caching Guide</dt>
330 <dd>The <a href="caching.html">Caching Guide</a> has been rewritten
331 to properly distinguish between the RFC2616 HTTP/1.1 caching
332 features provided by <module>mod_cache</module>, and the generic
333 key/value caching provided by the <a href="socache.html">socache</a>
334 interface, as well as to cover specialised caching provided by
335 mechanisms such as <module>mod_file_cache</module>.</dd>
340 <section id="developer">
341 <title>Module Developer Changes</title>
343 <dt>Check Configuration Hook Added</dt>
345 <dd>A new hook, <code>check_config</code>, has been added which runs
346 between the <code>pre_config</code> and <code>open_logs</code>
347 hooks. It also runs before the <code>test_config</code> hook
348 when the <code>-t</code> option is passed to
349 <program>httpd</program>. The <code>check_config</code> hook
350 allows modules to review interdependent configuration directive
351 values and adjust them while messages can still be logged to the
352 console. The user can thus be alerted to misconfiguration problems
353 before the core <code>open_logs</code> hook function redirects
354 console output to the error log.</dd>
356 <dt>Expression Parser Added</dt>
358 <dd>We now have a general-purpose expression parser, whose API is
359 exposed in <var>ap_expr.h</var>. This is adapted from the
360 expression parser previously implemented in
361 <module>mod_ssl</module>.</dd>
363 <dt>Authorization Logic Containers</dt>
365 <dd>Authorization modules now register as a provider, via
366 ap_register_auth_provider(), to support advanced authorization logic,
367 such as <directive module="mod_authz_core" type="section"
368 >RequireAll</directive>.</dd>
370 <dt>Small-Object Caching Interface</dt>
372 <dd>The <var>ap_socache.h</var> header exposes a provider-based
373 interface for caching small data objects, based on the previous
374 implementation of the <module>mod_ssl</module> session cache.
375 Providers using a shared-memory cyclic buffer, disk-based dbm
376 files, and a memcache distributed cache are currently
379 <dt>Cache Status Hook Added</dt>
381 <dd>The <module>mod_cache</module> module now includes a new
382 <code>cache_status</code> hook, which is called when the caching
383 decision becomes known. A default implementation is provided
384 which adds an optional <code>X-Cache</code> and
385 <code>X-Cache-Detail</code> header to the response.</dd>
388 <p>The developer documentation contains a
389 <a href="developer/new_api_2_4.html">detailed list of API changes</a>.</p>