Configuring Apache 2 on Debian, Ubuntu
The Debian distribution of Linux includes the Apache web server, both the venerable version 1 and the more modern version 2. The Debian maintainers have a peculiar way of arranging the configuration files for Apache 2.0 which is not documented in the standard Apache documentation. This introduction should help you get acclimated to the Debian way of configuring Apache 2.0.
Active Configuration Files
# /etc/apache2/apache2.conf - pulls in additional
# configurations in this order:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/[^.#]*
Include /etc/apache2/sites-enabled/[^.#]*
Debian stores its Apache 2.0 configuration files in the directory /etc/apache2
.
Normally the main Apache configuration file is called httpd.conf
. Although that file
exists on Debian, it is only there for compatibility with other software that expects it
to exist. The real configuration starts with the file apache2.conf
. You can still add
configuration statements to httpd.conf
, as apache2.conf
includes it, but you would
do well to ignore that fact. Your hand-edited changes should go elsewhere (see below).
Debian adds another configuration file, ports.conf
, which contains the Listen
directives telling the Apache server what IP address and port to listen to (Apache 2 no
longer uses the Port
directive.) I'm not sure why the maintainers decided to break
this out into a separate file.
The best place to put your own custom configurations is in the conf.d
directory. Files
in this directory are included as part of the "global" server configuration and will
apply to all virtual hosts (see below). For example, if all the sites on your server use
the Yahoo User Interface libraries, you might store
one copy of the libraries in a central location that can be shared across all sites, and
create a file /etc/apache2/conf.d/yui.conf
with an Alias
directive to map it to the
same URL space for all sites.
Apache Modules
# Files related to Apache modules
/etc/apache2/mods-enabled/*.load
/etc/apache2/mods-enabled/*.conf
/etc/apache2/mods-available/*.load
/etc/apache2/mods-available/*.conf
/usr/sbin/a2enmod
/usr/sbin/a2dismod
One of the great advantages of the Apache web server is its modular architecture. You
can add or remove functionality as dictated by your requirements. In the default Apache
build, you would find a section near the top of your httpd.conf
file with instructions
to load each module. Later in the file, you would find configuration sections specific
to each module, possibly wrapped in a <IfModule>
directive. This arrangement can be
tricky from the perspective of a system administrator who may need to install or
uninstall various Apache modules. Identifying the configuration changes that are
required by a module or that require a specific module can be difficult to do by hand
and even harder to automate with a script.
To make things easier on the server administrator, Debian takes advantage of the fact
that Apache configuration files may contain an Include
directive which pulls in
additional configuration files. Debian creates two non-standard directories:
/etc/apache2/mods-enabled
and /etc/apache2/mods-available
. Whenever you install an
Apache module from a Debian package, the module will drop one or two files into the
mods-available
directory. The mandatory ${module}.load
contains the Apache Load
directive to load the module into your web server. The optional ${module}.conf
file
contains additional configuration directives necessary for the operation of the module.
Installing a module from a Debian package makes it available to your server, but does
not (necessarily) automatically activate the module in your server. To activate the
module, use the a2enmod
command:
a2enmod ${module}
/etc/init.d/apache2 force-reload
The a2enmod
command will create symbolic links in the mods-enabled
directory
pointing to your ${module}.load
and, if it exists, ${module}.conf
. To force a
running Apache to re-read its configuration files and thus load the module, you must
then send it the force-reload
signal.
Likewise, to disable a module:
a2dismod ${module}
/etc/init.d/apache2 force-reload
Issue either command without a module argument and it will print a list of appropriate module names.
You can, of course, manually manage the symbolic links in the mods-enabled
directory,
but it is safer and easier to use the provided scripts.
Virtual Hosts
# Files related to Apache virtual hosts
/etc/apache2/sites-enabled/[^.#]*
/etc/apache2/sites-available/*
/usr/sbin/a2ensite
/usr/sbin/a2dissite
A “Virtual Host” is just a web site served by your Apache server. Virtual hosts are
managed just like modules. Each site gets its own configuration file that contains all
the Apache directives that pertain only to that site. These files (or symbolic links to
them) should be placed in the sites-available
directory. There are no strict naming
requirements for these files (files beginning with .
or #
will be ignored), but for
convenience you should name each site configuration file to match the domain name it is
serving. There is no need to add a "conf" extension. For example, the vhost file used
for this web site is named www.control-escape.com
.
To activate any of these sites, use the a2ensite
command, which operates identically
to the a2enmod
command mentioned above. There is a respective a2dissite
command for
disabling a site.
Even if you only run one web site on your server, Apache is still configured to have one
virtual host, the Default Virtual Host
. The default virtual host is treated specially
by the a2ensite
script. If you look in your sites-enabled
directory you will find
that the link has been named 000-default
. The number is prepended to the name by the
a2ensite
script to ensure that the default virtual host is the first one included by
Apache (which sorts the files alphabetically). If you want other sites to be loaded in a
particular order other than alphabetical, you can rename the links here, but you should
always ensure that the default virtual host is the first one loaded.
Conclusion and Resources
Although Debian's configuration setup for Apache 2 is non-standard, it is still fairly
easy to understand, and it provides tools that make life easier for the administrators
of web servers that change often or serve multiple web sites. For additional help, view
the Debian README file at /etc/apache2/README
. For general information on configuring
Apache, try these resources.
- Web: Official Apache 2 Documentation
- Book: Apache: The Definitive Guide (3rd Edition) — O'Reilly's definitive guide to Apache is perhaps the best general resource to Apache outside the documentation itself.
To learn more about Debian GNU/Linux, visit Debian.org.
To learn more about Ubuntu, visit Ubuntu.com, or buy a copy of The Official Ubuntu Book