Apache webserver reads its configuration files every time it's started. The configuration files are in plain text format, and Apache will need to restart every time there are changes in the configuration file for the changes to take effect.

Apache's primary configuration file location is set during compilation and is set differently between distributions. The configuration is usually split into multiple files for ease of management and separation of concern. It will then be called from the main configuration file using Include and IncludeOptional directives.

You can always check the location of the primary configuration file by running the Apache binary for your distribution with the -V option and then looking for the SERVER_CONFIG_FILE value.

$ apachectl -V
Server version: Apache/2.4.41 (Unix)
Server built:   Nov  9 2019 07:53:54
Server's Module Magic Number: 20120211:88
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

Combine the output for both HTTPD_ROOT and SERVER_CONFIG_FILE If the output doesn't provide an absolute full path of the configuration file.

Default Apache configuration location

The location of Apache's main configuration file is different for most distributions, and they are also split differently. The following table lists how the configuration file is managed for different distributions:

Option Debian, Ubuntu openSUSE and SLES Fedora Core, CentOS, RHEL macOS homebrew xampp
Base directory /etc/apache2/ /etc/apache2/ /etc/httpd/ /private/etc/apache2/ /usr/local/etc/httpd/ {installation directory}/apache/conf/
Main configuration apache2.conf httpd.conf conf/httpd.conf httpd.conf httpd.conf httpd.conf
ServerRoot apache2.conf n/a conf/httpd.conf httpd.conf httpd.conf httpd.conf
DocumentRoot sites-enabled/*.conf default-server.conf conf/httpd.conf httpd.conf httpd.conf httpd.conf, extra/httpd-ssl.conf
VirtualHost sites-enabled/*.conf vhosts.d/*.conf conf/httpd.conf httpd.conf, other/*.conf httpd.conf httpd.conf, extra/httpd-ssl.conf
LoadModule mods-enabled/*.load loadmodule.conf conf.modules.d/*.conf httpd.conf, extra/*.conf httpd.conf httpd.conf, extra/*.conf
Log apache2.conf, sites-enabled/*.conf httpd.conf, vhosts.d/*.conf conf/httpd.conf httpd.conf httpd.conf httpd.conf
User / Group apache2.conf, envvars uid.conf conf/httpd.conf httpd.conf httpd.conf httpd.conf

Path for files and directories are relative to the Base directory if it doesn't start with a /; e.g. conf/httpd.conf for CentOS's main configuration file translates to /etc/httpd/conf/httpd.conf.

Default Apache configuration value

Apart from using a different location for the main configuration file, different distributions also use different values for Apache configuration options.

The table below lists some of the default configuration values for Apache on different distributions.

Option Debian, Ubuntu openSUSE and SLES Fedora Core, CentOS, RHEL macOS homebrew xampp
ServerRoot /etc/apache2/ n/a /etc/httpd /usr/ /usr/local/opt/httpd/ {installation directory}/apache/
DocumentRoot /var/www/html/ /srv/www/ /var/www/html /Library/WebServer/Documents/ /usr/local/var/www/ {installation directory}/htdocs/
Module Location /usr/lib/apache2/modules/ /usr/lib64/apache2-prefork/ modules/ libexec/apache2/ lib/httpd/modules/ modules/
Access / Error log /var/log/apache2 /var/log/apache2/ logs/ /private/var/log/apache2/ /usr/local/var/log/httpd/ logs/
User www-data wwwrun apache _www _www daemon
Group www-data www apache _www _www daemon
Binary name apache2 httpd httpd httpd httpd httpd

Path for files and directories are relative to the Base directory if it doesn't start with a /; e.g. modules/ for CentOS's module directory translates to /etc/httpd/modules/.

Absolute paths which start with /, such as Ubuntu's module location, are based on the root directory.

Discuss the article:

Comment anonymously. Login not required.