A traditional Apache configuration consists of one file (httpd.conf) that contains all the required configuration directives. However a single file is a problem for packaging systems where different packages are responsible for different aspects of Apache's operation. For them it's much easier if they can contribute one or more files containing configuration fragments and if these are then incorporated into the Apache configuration using the 'Include' directive. While convenient for the packaging system, this is less convenient for the system administrator who now finds his Apache configuration spread across multiple files in several directories. Here are a two diagrams showing the configuration file layout in two common Linux distributions - Debian (and so Ubuntu), and SLES:
Debian
Note that the
mods-enabled and
hosts-enabled directories contain symlinks to files actually stored in the parallel
mods-available and
hosts-available directories, and that commands,
a2enmod,
a2dismod,
a2ensite and
a2dissite, are provided to manipulate these symlinks. Within the
mods-{available,enabled} directories, the
*.load files contain the Apache configuration directive to load the module in question; the coresponding
*.conf files contain configuration directives necessary for the module.
httpd.conf is included for backwards compatability and to support installing 3rd party modules directly via
apxs2. See the file
/etc/apache2/README for more details.
SLES
The files shown in yellow boxes, all of which appear in the
/etc/apache2/sysconfig/ directory, are regenerated automatically from information in
/etc/sysconfig/apache2/ on Apache startup and so shouldn't be hand edited. See comments at the top of /etc/apache2/httpd.conf for more information.
This diagram is for SLES10 and Apache 2; similar arrangements were used with SLES 9 and Apache 1.3, with '
apache2' replaced by '
httpd' in filenames. In SLES 9 it was necessary to run
SuSEconfig to regenerate the files based on sysconfig information.
2010-02-23: Debian diagram amended - the 'master' file was incorrectly labelled httpd.conf and should have been apache2.conf. Apart from anything else, you can't have httpd.conf including itself!