<-
Apache > HTTP Server > Documentation > Version 2.4

Upgrading to 2.4 from 2.2 3y704g

Available Languages:  fr 

In order to assist folks upgrading, we maintain a document describing information critical to existing Apache HTTP Server s. These are intended to be brief notes, and you should be able to find more information in either the API updates overview.

This document describes changes in server behavior that might require you to change your configuration or how you use the server in order to continue using 2.4 as you are currently using 2.2. To take advantage of new features in 2.4, see the New Features document.

This document describes only the changes from 2.2 to 2.4. If you are upgrading from version 2.0, you should also consult the 2.0 to 2.2 upgrading document.

 Apache!

See also 27136x

top

Compile-Time Configuration Changes 45653m

The compilation process is very similar to the one used in version 2.2. Your old configure command line (as found in build/config.nice in the installed server directory) can be used in most cases. There are some changes in the default settings. Some details of changes:

top

Run-Time Configuration Changes 4b5l1x

There have been significant changes in authorization configuration, and other minor configuration changes, that could require changes to your 2.2 configuration files before using them for 2.4.

Authorization 6j702r

Any configuration file that uses authorization will likely need changes.

You should review the Beyond just authorization which explains the new mechanisms for controlling the order in which the authorization directives are applied.

Directives that control how authorization modules respond when they don't match the authenticated have been removed: This includes AuthzLDAPAuthoritative, AuthzDBDAuthoritative, AuthzDBMAuthoritative, AuthzGroupFileAuthoritative, AuthzAuthoritative, and AuthzOwnerAuthoritative. These directives have been replaced by the more expressive RequireAll.

If you use mod_authz_dbm, you must port your configuration to use Require dbm-group ... in place of Require group ....

Access control 1v5h5y

In 2.2, access control based on client hostname, IP address, and other characteristics of client requests was done using the directives Satisfy.

In 2.4, such access control is done in the same way as other authorization checks, using the new module mod_access_compat is provided.

Mixing old and new directives 1m4

Mixing old directives like mod_access_compat was created to configurations containing only old directives to facilitate the 2.4 upgrade. Please check the examples below to get a better idea about issues that might arise.

Here are some examples of old and new ways to do the same access control.

In this example, there is no authentication and all requests are denied.

2.2 configuration: 5t1x3c

Order deny,allow
Deny from all

2.4 configuration: 93d5e

Require all denied

In this example, there is no authentication and all requests are allowed.

2.2 configuration: 5t1x3c

Order allow,deny
Allow from all

2.4 configuration: 93d5e

Require all granted

In the following example, there is no authentication and all hosts in the example.org domain are allowed access; all other hosts are denied access.

2.2 configuration: 5t1x3c

Order Deny,Allow
Deny from all
Allow from example.org

2.4 configuration: 93d5e

Require host example.org

In the following example, mixing old and new directives leads to unexpected results.

Mixing old and new directives: NOT WORKING AS EXPECTED x462y

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

Why httpd denies access to servers-status even if the configuration seems to allow it? Because merge scenario.

This example conversely works as expected:

Mixing old and new directives: WORKING AS EXPECTED 1pe6o

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

So even if mixing configuration is still possible, please try to avoid it when upgrading: either keep old directives and then migrate to the new ones on a later stage or just migrate everything in bulk.

In many configurations with authentication, where the value of the Satisfy was the default of ALL, snippets that simply disabled host-based access control are omitted:

2.2 configuration: 5t1x3c

# 2.2 config that disables host-based access control and uses only authentication
Order Deny,Allow
Allow from all
AuthType Basic
AuthBasirovider file
AuthFile /example.com/conf/s.wd
AuthName secure
Require valid-

2.4 configuration: 93d5e

# No replacement of disabling host-based access control needed
AuthType Basic
AuthBasirovider file
AuthFile /example.com/conf/s.wd
AuthName secure
Require valid-

In configurations where both authentication and access control were meaningfully combined, the access control directives should be migrated. This example allows requests meeting both criteria:

2.2 configuration: 5t1x3c

Order allow,deny
Deny from all
# Satisfy ALL is the default
Satisfy ALL
Allow from 127.0.0.1
AuthType Basic
AuthBasirovider file
AuthFile /example.com/conf/s.wd
AuthName secure
Require valid-

2.4 configuration: 93d5e

AuthType Basic
AuthBasirovider file
AuthFile /example.com/conf/s.wd
AuthName secure
<RequireAll>
  Require valid-
  Require ip 127.0.0.1
</RequireAll>

In configurations where both authentication and access control were meaningfully combined, the access control directives should be migrated. This example allows requests meeting either criteria:

2.2 configuration: 5t1x3c

Order allow,deny
Deny from all
Satisfy any
Allow from 127.0.0.1
AuthType Basic
AuthBasirovider file
AuthFile /example.com/conf/s.wd
AuthName secure
Require valid-

2.4 configuration: 93d5e

AuthType Basic
AuthBasirovider file
AuthFile /example.com/conf/s.wd
AuthName secure
# Implicitly <RequireAny>
Require valid-
Require ip 127.0.0.1

Other configuration changes 2d4x1k

Some other small adjustments may be necessary for particular configurations as discussed below.

top

Misc Changes 352i25

top

Third Party Modules 1pv6i

All modules must be recompiled for 2.4 before being loaded.

Many third-party modules designed for version 2.2 will otherwise work unchanged with the Apache HTTP Server version 2.4. Some will require changes; see the API update overview.

top

Common problems when upgrading 4vf6e

Available Languages:  fr 

top

Comments 2p1l6j

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our s if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.