<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Upgrading to 2.2 from 2.0 - Apache HTTP Server Version 2.2</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
<script src="./style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="./images/favicon.ico" rel="shortcut icon" /><link href="http://httpd.apache.org/docs/current/upgrading.html" rel="canonical" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.2</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div class="retired"><h4>Please note</h4>
            <p>This document refers to the <strong>2.2</strong> version of Apache httpd, which is no longer maintained. The active release is documented <a href="http://httpd.apache.org/docs/current">here</a>. If you have not already upgraded, please follow <a href="http://httpd.apache.org/docs/current/upgrading.html">this link</a> for more information.</p>
        <p>You may follow <a href="http://httpd.apache.org/docs/current/upgrading.html">this link</a> to go to the current version of this document.</p></div><div id="preamble"><h1>Upgrading to 2.2 from 2.0</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
</div>

  <p>In order to assist folks upgrading, we maintain a document
  describing information critical to existing Apache users. These
  are intended to be brief notes, and you should be able to find
  more information in either the <a href="new_features_2_2.html">New Features</a> document, or in
  the <code>src/CHANGES</code> file.</p>

  <p>This document describes only the changes from 2.0 to 2.2.  If you
  are upgrading from version 1.3, you should also consult the <a href="http://httpd.apache.org/docs/2.0/upgrading.html">1.3 to 2.0
  upgrading document.</a></p>

</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">Compile-Time Configuration Changes</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#run-time">Run-Time Configuration Changes</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#misc">Misc Changes</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#third-party">Third Party Modules</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="new_features_2_2.html">Overview of new features in
  Apache 2.2</a></li></ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="compile-time" id="compile-time">Compile-Time Configuration Changes</a></h2>
    

    <p>The compilation process is very similar to the one used in
    version 2.0.  Your old <code>configure</code> command line (as
    found in <code>build/config.nice</code> in the installed server
    directory) can be used in some cases.  The most significant change
    required will be to account for changes in module names, in
    particular for the authentication and authorization modules.
    Some details of changes:</p>

    <ul>
      <li>mod_imap has been renamed to <code class="module"><a href="./mod/mod_imagemap.html">mod_imagemap</a></code></li>
      <li>mod_auth has been split up into <code class="module"><a href="./mod/mod_auth_basic.html">mod_auth_basic</a></code>,
          <code class="module"><a href="./mod/mod_authn_file.html">mod_authn_file</a></code>, <code class="module"><a href="./mod/mod_authz_user.html">mod_authz_user</a></code>, and
          <code class="module"><a href="./mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
      <li>mod_access has been renamed to <code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li>
      <li>mod_auth_ldap has been renamed to <code class="module"><a href="./mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
      <li>Upgraded to require the APR 1.0 API.</li>
      <li>Updated bundled PCRE version to 5.0</li>
    </ul>

  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="run-time" id="run-time">Run-Time Configuration Changes</a></h2>
    

    <p>Your existing version 2.0 config files and startup scripts can
      usually be used unchanged in version 2.2.  Some small
      adjustments may be necessary for particular configurations as
      discussed below.  In addition, if you dynamically load the
      standard modules using the <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> directive, then you will
      need to account for the module name changes mentioned above.</p>

    <p>If you choose to use the new default
      configuration file for version 2.2, you will find that it has
      been greatly simplified by removing all but the most essential
      configuration settings.  A set of example configuration settings
      for more advanced features is present in the
      <code>conf/extra/</code> directory of the installed server.  Default
      configuration files are installed in the <code>conf/original</code>
      directory.</p>

    <p>Some runtime configuration changes that you may notice:</p>

    <ul>
      <li>The <code class="program"><a href="./programs/apachectl.html">apachectl</a></code> option
      <code>startssl</code> is no longer available.  To enable SSL
      support, you should edit <code>httpd.conf</code> to include the
      relevant <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code> directives and then use
      <code>apachectl start</code> to start the server.  An example
      configuration to activate <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code> has been
      included in <code>conf/extra/httpd-ssl.conf</code>.</li>

      <li>The default setting of <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> is now
      <code>Off</code>.  If you did not have this directive in your
      config file, you can add <code>UseCanonicalName On</code> to
      retain the old behavior.</li>

      <li>The module <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> will no longer act
      on requests unless a <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> directive specifying a
      directory name is present in the config file.  To restore the
      old default behavior, place the directive <code>UserDir
      public_html</code> in your config file.</li>

      <li>The directive <code class="directive">AuthDigestFile</code>
      from <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code> has been merged with
      <code class="directive"><a href="./mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
      and is now part of <code class="module"><a href="./mod/mod_authn_file.html">mod_authn_file</a></code>.</li>

      <li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directives
      are evaluated before <code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> ones.</li>
    </ul>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="misc" id="misc">Misc Changes</a></h2>
    

    <ul>
      <li>The module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, which was
      experimental in Apache 2.0, is now a standard module.</li>

      <li>The module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>, which was
      experimental in Apache 2.0, is now a standard module.</li>

      <li>The module <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code>, which was
      experimental in Apache 2.0, is now a standard module.</li>

      <li>The module <code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code>, which was
      experimental in Apache 2.0, is now a standard module.</li>

      <li>The module <code class="module"><a href="./mod/mod_dumpio.html">mod_dumpio</a></code>, which was
      experimental in Apache 2.0, is now a standard module.</li>

    </ul>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="third-party" id="third-party">Third Party Modules</a></h2>
    

   <p>Many third-party modules designed for version 2.0 will work
   unchanged with the Apache HTTP Server version 2.2.  But all
   modules must be recompiled before being loaded.</p>

  </div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators 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 <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.2/upgrading.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2018 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>