| <?xml version='1.0' encoding='UTF-8' ?> | |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> | |
| <?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?> | |
| <!-- $LastChangedRevision$ --> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one or more | |
| contributor license agreements. See the NOTICE file distributed with | |
| this work for additional information regarding copyright ownership. | |
| The ASF licenses this file to You under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <manualpage metafile="install.xml.meta"> | |
| <title>Compiling and Installing</title> | |
| <summary> | |
| <p>The Apache HTTP Server is released as source code. This document | |
| covers building and installing the server from source on Unix and | |
| Unix-like systems. For Windows, see <a | |
| href="platform/windows.html">Using Apache HTTP Server with Microsoft | |
| Windows</a> and <a | |
| href="platform/win_compiling.html">Compiling Apache httpd for Microsoft | |
| Windows</a>. For other platforms, see the <a | |
| href="platform/">platform</a> documentation.</p> | |
| <p>If you install httpd from a distribution package (RPM, DEB, etc.), | |
| configuration layout and defaults may differ from what is described here. | |
| See <a href="#thirdp">third-party packages</a> below, and consult your | |
| distribution's documentation for platform-specific details.</p> | |
| <p>If you are upgrading from one minor version to the next (for | |
| example, 2.4.66 to 2.4.67), please skip down to the <a | |
| href="#upgrading">upgrading</a> section.</p> | |
| </summary> | |
| <seealso><a href="programs/configure.html">Configure the source tree</a></seealso> | |
| <seealso><a href="invoking.html">Starting Apache httpd</a></seealso> | |
| <seealso><a href="stopping.html">Stopping and Restarting</a></seealso> | |
| <section id="overview"><title>Overview for the | |
| impatient</title> | |
| <table> | |
| <columnspec><column width=".13"/><column width=".80"/></columnspec> | |
| <tr> | |
| <td><a href="#download">Download</a></td> | |
| <td>Download the latest release from <a href="https://httpd.apache.org/download.cgi#apache24">https://httpd.apache.org/download.cgi</a> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td><a href="#extract">Extract</a></td> | |
| <td><highlight language="sh"> | |
| $ tar xzf httpd-NN.tar.gz | |
| $ cd httpd-NN | |
| </highlight></td> | |
| </tr> | |
| <tr> | |
| <td><a href="#configure">Configure</a></td> | |
| <td><code>$ ./configure --prefix=<em>PREFIX</em></code> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td><a href="#compile">Compile</a></td> | |
| <td><code>$ make</code> </td> | |
| </tr> | |
| <tr> | |
| <td><a href="#install">Install</a></td> | |
| <td><code>$ make install</code> </td> | |
| </tr> | |
| <tr> | |
| <td><a href="#customize">Customize</a></td> | |
| <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td> | |
| </tr> | |
| <tr> | |
| <td><a href="#test">Test</a></td> | |
| <td><code>$ <em>PREFIX</em>/bin/apachectl -k start</code> | |
| </td> | |
| </tr> | |
| </table> | |
| <p><em>NN</em> must be replaced with the current version | |
| number, and <em>PREFIX</em> must be replaced with the | |
| filesystem path under which the server should be installed. If | |
| <em>PREFIX</em> is not specified, it defaults to | |
| <code>/usr/local/apache2</code>.</p> | |
| <p>Each section of the compilation and installation process is | |
| described in more detail below, beginning with the requirements | |
| for compiling and installing Apache httpd.</p> | |
| </section> | |
| <section id="requirements"><title>Requirements</title> | |
| <p>The following requirements exist for building and running Apache httpd:</p> | |
| <dl> | |
| <dt>APR and APR-Util</dt> | |
| <dd>Make sure you have APR and APR-Util already installed on | |
| your system. If you don't, or prefer to not use the system-provided | |
| versions, download the latest versions of both APR and APR-Util | |
| from <a href="https://apr.apache.org/">Apache APR</a>, unpack | |
| them into <code>/httpd_source_tree_root/srclib/apr</code> and <code>/httpd_source_tree_root/srclib/apr-util</code> | |
| (be sure the directory names do not have version numbers; for example, | |
| the APR distribution must be under /httpd_source_tree_root/srclib/apr/) and use | |
| <code>./configure</code>'s <code>--with-included-apr</code> | |
| option. On some platforms, you may have to install the | |
| corresponding <code>-dev</code> packages to allow httpd to build | |
| against your installed copy of APR and APR-Util.</dd> | |
| <dt>Perl-Compatible Regular Expressions Library (PCRE2)</dt> | |
| <dd>This library is required but not bundled with httpd. | |
| Download the source code from <a href="https://github.com/PCRE2Project/pcre2">https://github.com/PCRE2Project/pcre2</a> | |
| or install it from your system's package manager. If your build system can't find | |
| the <code>pcre2-config</code> script installed by the PCRE2 build, | |
| point to it using the <code>--with-pcre</code> parameter. On some platforms, | |
| you may have to install the corresponding <code>-dev</code> | |
| package (e.g. <code>libpcre2-dev</code> or <code>pcre2-devel</code>) | |
| to allow httpd to build against your installed copy of PCRE2.</dd> | |
| <dt>Disk Space</dt> | |
| <dd>Make sure you have at least 200 MB of temporary free disk | |
| space available. After installation the server occupies | |
| approximately 50 MB of disk space. The actual disk space | |
| requirements will vary considerably based on your chosen | |
| configuration options, any third-party modules, and, of course, | |
| the size of the web site or sites that you have on the server.</dd> | |
| <dt>ANSI-C Compiler and Build System</dt> | |
| <dd>Make sure you have an ANSI-C compiler installed. The <a | |
| href="https://gcc.gnu.org/">GNU C | |
| compiler (GCC)</a> from the <a | |
| href="https://www.gnu.org/">Free Software Foundation (FSF)</a> | |
| is recommended. If you don't have GCC | |
| then at least make sure your vendor's compiler is ANSI | |
| compliant. In addition, your <code>PATH</code> must contain | |
| basic build tools such as <code>make</code>.</dd> | |
| <dt>Accurate time keeping</dt> | |
| <dd>HTTP protocol headers use timestamps, so your system clock | |
| must be accurate. Most Linux distributions enable | |
| <code>systemd-timesyncd</code> or <code>chrony</code> by | |
| default. Verify that time synchronization is active on your | |
| system before running a production server.</dd> | |
| <dt><a href="https://www.perl.org/">Perl 5</a> | |
| [OPTIONAL]</dt> | |
| <dd>For some of the support scripts like <program> | |
| apxs</program> or <program>dbmmanage</program> (which are | |
| written in Perl) the Perl 5 interpreter is required. | |
| If no Perl 5 interpreter is found by the | |
| <program>configure</program> script, you will not be able to use | |
| the affected support scripts. Of course, you will still be able to | |
| build and use Apache httpd.</dd> | |
| </dl> | |
| </section> | |
| <section id="download"><title>Download</title> | |
| <p>Download the source tarball from the <a | |
| href="https://httpd.apache.org/download.cgi">Apache HTTP Server | |
| download site</a>.</p> | |
| <p>After downloading, it is important to verify that you have a | |
| complete and unmodified version of the Apache HTTP Server. This | |
| can be accomplished by testing the downloaded tarball against the | |
| PGP signature. Details on how to do this are available on the | |
| <a href="https://httpd.apache.org/dev/verification.html">verification | |
| page</a>.</p> | |
| </section> | |
| <section id="extract"><title>Extract</title> | |
| <p>Extract the source from the Apache HTTP Server tarball:</p> | |
| <example> | |
| <highlight language="sh"> | |
| $ tar xzf httpd-<em>NN</em>.tar.gz | |
| </highlight> | |
| </example> | |
| <p>This will create a new directory under the current directory | |
| containing the source code for the distribution. You should | |
| <code>cd</code> into that directory before proceeding with | |
| compiling the server.</p> | |
| </section> | |
| <section id="configure"><title>Configuring the source tree</title> | |
| <p>The next step is to configure the httpd source tree for your | |
| particular platform and personal requirements. This is done using | |
| the script <program>configure</program> included in | |
| the root directory of the distribution. (Developers downloading | |
| an unreleased version of the httpd source tree will need to have | |
| <code>autoconf</code> and <code>libtool</code> installed and will | |
| need to run <code>buildconf</code> before proceeding with the next | |
| steps. This is not necessary for official releases.)</p> | |
| <p>To configure the source tree using all the default options, | |
| type <code>./configure</code>. To change the default | |
| options, <program>configure</program> accepts a variety of variables | |
| and command line options.</p> | |
| <p>The most important option is the location <code>--prefix</code> | |
| where httpd is to be installed later, because httpd has to be | |
| configured for this location to work correctly. More fine-tuned | |
| control of the location of files is possible with additional <a | |
| href="programs/configure.html#installationdirectories">configure | |
| options</a>.</p> | |
| <p>Also at this point, you can specify which <a | |
| href="programs/configure.html#optionalfeatures">features</a> you | |
| want included in httpd by enabling and disabling <a | |
| href="mod/">modules</a>. httpd comes with a wide range of modules | |
| included by default. They will be compiled as | |
| <a href="dso.html">shared objects (DSOs)</a> which can be loaded | |
| or unloaded at runtime. | |
| You can also choose to compile modules statically by using the option | |
| <code>--enable-<var>module</var>=static</code>.</p> | |
| <p>Additional modules are enabled using the | |
| <code>--enable-<var>module</var></code> option, where | |
| <var>module</var> is the name of the module with the | |
| <code>mod_</code> string removed and with any underscore converted | |
| to a dash. Similarly, you can disable modules with the | |
| <code>--disable-<var>module</var></code> option. Be careful when | |
| using these options, since <program>configure</program> cannot warn you | |
| if the module you specify does not exist; it will ignore the option.</p> | |
| <p>In addition, it is sometimes necessary to provide the | |
| <program>configure</program> script with extra information about the | |
| location of your compiler, libraries, or header files. This is | |
| done by passing either environment variables or command line | |
| options to <program>configure</program>. For more information, see the | |
| <program>configure</program> manual page. Or invoke | |
| <program>configure</program> using the <code>--help</code> option.</p> | |
| <p>For a short impression of what possibilities you have, here | |
| is a typical example which compiles httpd for the installation | |
| tree <code>/sw/pkg/apache</code> with a particular compiler and flags | |
| plus the two additional modules <module>mod_ldap</module> and | |
| <module>mod_lua</module>:</p> | |
| <example> | |
| <highlight language="sh"> | |
| $ CC="pgcc" CFLAGS="-O2" \ | |
| ./configure --prefix=/sw/pkg/apache \ | |
| --enable-ldap=shared \ | |
| --enable-lua=shared | |
| </highlight> | |
| </example> | |
| <p>When <program>configure</program> is run it will take several minutes to | |
| test for the availability of features on your system and build | |
| Makefiles which will later be used to compile the server.</p> | |
| <p>Details on all the different <program>configure</program> options are | |
| available on the <program>configure</program> manual page.</p> | |
| </section> | |
| <section id="compile"><title>Build</title> | |
| <p>Now you can build the various parts which form the httpd | |
| package by running:</p> | |
| <example> | |
| <highlight language="sh">$ make</highlight> | |
| </example> | |
| <p>Please be patient here, since a base configuration takes | |
| several minutes to compile and the time will vary widely | |
| depending on your hardware and the number of modules that you | |
| have enabled.</p> | |
| </section> | |
| <section id="install"><title>Install</title> | |
| <p>Now it's time to install the package under the configured | |
| installation <em>PREFIX</em> (see <code>--prefix</code> option | |
| above) by running:</p> | |
| <example> | |
| <highlight language="sh">$ make install</highlight> | |
| </example> | |
| <p>This step will typically require root privileges, since | |
| <em>PREFIX</em> is usually a directory with restricted write | |
| permissions.</p> | |
| <p>If you are upgrading, the installation will not overwrite | |
| your configuration files or documents.</p> | |
| </section> | |
| <section id="customize"><title>Customize</title> | |
| <p>Next, you can customize your Apache HTTP Server by editing | |
| the <a href="configuring.html">configuration files</a> under | |
| <code><em>PREFIX</em>/conf/</code>.</p> | |
| <example> | |
| <highlight language="sh">$ vi <em>PREFIX</em>/conf/httpd.conf</highlight> | |
| </example> | |
| <p>Have a look at the httpd manual under | |
| <code><em>PREFIX</em>/docs/manual/</code> or consult <a | |
| href="https://httpd.apache.org/docs/&httpd.docs;/" | |
| >https://httpd.apache.org/docs/&httpd.docs;/</a> for the most recent | |
| version of this manual and a complete reference of available <a | |
| href="mod/directives.html">configuration directives</a>.</p> | |
| </section> | |
| <section id="test"><title>Test</title> | |
| <p>Now you can <a href="invoking.html">start</a> your Apache HTTP Server by immediately running:</p> | |
| <example> | |
| <highlight language="sh">$ <em>PREFIX</em>/bin/apachectl -k start</highlight> | |
| </example> | |
| <p>You should then be able to request your first document | |
| via the URL <code>http://localhost/</code>. The web page you see is located | |
| under the <directive module="core">DocumentRoot</directive>, | |
| which will usually be <code><em>PREFIX</em>/htdocs/</code>. | |
| Then <a href="stopping.html">stop</a> the server again by | |
| running:</p> | |
| <example> | |
| <highlight language="sh">$ <em>PREFIX</em>/bin/apachectl -k stop</highlight> | |
| </example> | |
| </section> | |
| <section id="upgrading"><title>Upgrading</title> | |
| <p>The first step in upgrading is to read the release announcement | |
| and the file <code>CHANGES</code> in the source distribution to | |
| find any changes that may affect your site. When changing between | |
| major releases (for example, from 2.4 to 2.6), | |
| there will likely be major differences in the compile-time and | |
| run-time configuration that will require manual adjustments. All | |
| modules will also need to be upgraded to accommodate changes in the | |
| module API.</p> | |
| <p>Upgrading from one minor version to the next (for example, from | |
| 2.4.66 to 2.4.67) is easier. The <code>make install</code> | |
| process will not overwrite any of your existing documents, log | |
| files, or configuration files. In addition, the developers make | |
| every effort to avoid incompatible changes in the | |
| <program>configure</program> options, run-time configuration, or the | |
| module API between minor versions. In most cases you should be able to | |
| use an identical <program>configure</program> command line, an identical | |
| configuration file, and all of your modules should continue to | |
| work.</p> | |
| <p>To upgrade across minor versions, start by finding the file | |
| <code>config.nice</code> in the <code>build</code> directory of | |
| your installed server or at the root of the source tree for your | |
| old install. This will contain the exact | |
| <program>configure</program> command line that you used to | |
| configure the source tree. Then to upgrade from one version to | |
| the next, you need only copy the <code>config.nice</code> file to | |
| the source tree of the new version, edit it to make any desired | |
| changes, and then run:</p> | |
| <example> | |
| <highlight language="sh"> | |
| $ ./config.nice | |
| $ make | |
| $ make install | |
| $ <em>PREFIX</em>/bin/apachectl -k graceful-stop | |
| $ <em>PREFIX</em>/bin/apachectl -k start | |
| </highlight> | |
| </example> | |
| <note type="warning">You should always test any new version in your | |
| environment before putting it into production. For example, you | |
| can install and run the new version along side the old one by | |
| using a different <code>--prefix</code> and a | |
| different port (by adjusting the <directive | |
| module="mpm_common">Listen</directive> directive) to test for any | |
| incompatibilities before doing the final upgrade.</note> | |
| <p>You can pass additional arguments to <code>config.nice</code>, | |
| which will be appended to your original <program>configure</program> | |
| options:</p> | |
| <example> | |
| <highlight language="sh"> | |
| $ ./config.nice --prefix=/home/test/apache --with-port=90 | |
| </highlight> | |
| </example> | |
| </section> | |
| <section id="thirdp"><title>Third-party packages</title> | |
| <p>Many operating systems ship pre-built Apache httpd packages. | |
| These are convenient for getting started quickly, but they often | |
| differ from a source build in configuration file layout, | |
| compiled-in modules, and default paths. The documentation on this | |
| site describes the server as built from source; if you are using a | |
| platform package, consult your distribution's documentation for | |
| platform-specific details.</p> | |
| <p>Some common examples:</p> | |
| <dl> | |
| <dt>Fedora / CentOS / Red Hat Enterprise Linux</dt> | |
| <dd> | |
| <highlight language="sh"> | |
| sudo dnf install httpd | |
| sudo systemctl start httpd | |
| </highlight> | |
| <p>See <a | |
| href="https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-apache-http-server/index.html">the | |
| Fedora project's documentation</a> for configuration layout and | |
| platform-specific notes.</p> | |
| </dd> | |
| <dt>Ubuntu / Debian</dt> | |
| <dd> | |
| <highlight language="sh"> | |
| sudo apt install apache2 | |
| sudo systemctl start apache2 | |
| </highlight> | |
| <p>See <a href="https://ubuntu.com/tutorials/install-and-configure-apache">Ubuntu's | |
| documentation</a> for configuration layout and | |
| platform-specific notes.</p> | |
| </dd> | |
| </dl> | |
| <p>Our software license not only permits, but encourages, this kind | |
| of redistribution. However, it does result in a situation where the | |
| configuration layout and defaults on your installation of the server | |
| may differ from what is stated in the documentation. A <a | |
| href="https://cwiki.apache.org/confluence/display/httpd/DistrosDefaultLayout">description | |
| of these third-party distributions</a> is available in the HTTP | |
| Server wiki.</p> | |
| <note type="warning">Don't see your favorite platform mentioned | |
| here? <a href="https://httpd.apache.org/docs-project/">Come help us | |
| improve this doc.</a></note> | |
| </section> | |
| </manualpage> |