Install Apache 2 on Debian
Apache is a commonly used HTTP server. It is known for its modularity and the flexibility of its usages. This guide help you setup Apache 2 on Debian GNU/Linux. It accelerates the creation of basic virtualhosts.
This howto is tested on:
- Debian 5.0 Lenny
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
- Ubuntu 13.10 Saucy Salamander
Installation
There is 3 Apache 2 versions in Debian repositories :
- apache2-mpm-worker : Multi-threaded version able to manage a great number of incoming connexions with a low memory consumption.
- apache2-mpm-event : apache2-mpm-worker based version with a better Keep-Alive support. This version is experimental in Apache 2.2 (Debian 6.0 Squeeze and below).
- apache2-mpm-prefork : Version without multi-thread support needed to use mod_php5. This version is not optimal. It is best to use PHP-FPM with apache2-mpm-worker.
Install the HTTP server :
command apt-get install apache2-mpm-worker
Enable rewrite module :
command a2enmod rewrite
Enable named virtual hosts in order to host many domains on one IP address :
[[ -z "$(command grep 'NameVirtualHost.*:80' /etc/apache2/ports.conf)" ]] \
&& command sed -i -e '/Listen[\t ]*80/i\
NameVirtualHost *:80' '/etc/apache2/ports.conf'
default_site='/etc/apache2/sites-available/default'
[[ -e "${default_site}" ]] \
&& || default_site='/etc/apache2/sites-available/000-default.conf'
[[ -e "${default_site}" && -z "$(command grep 'VirtualHost[ \t]*\*:80' "${default_site}")" ]] \
&& command sed -i -e 's/\(VirtualHost[ \t]*\*\)>/\1:80>/g' \
-e 's/^\(NameVirtualHost.*\)$/#\1/g' \
"${default_site}"
Reload the configuration :
command type -f 'service' &>'/dev/null' && command service 'apache2' 'force-reload'
command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'force-reload'
Redirect emails sent to www-data user to the root user:
[[ -e '/etc/aliases' && -z "$(command grep '^www-data:' '/etc/aliases' )" ]] \
&& command sed -i -e '/^root:/i\
www-data: root' \
'/etc/aliases'
Reload aliases list:
command type -f 'newaliases' &>'/dev/null' && command newaliases
Finalisation
This howto recommands :
- Ease Apache 2 server administration with a2tools
- Enable the HTTPS protocol with Apache 2 on Debian
- Harden the security of Apache 2 on Debian.
PHP 5
This howto recommands enabling PHP 5 with:
Note : if you don't wish to use PHP-FPM, install PHP 5 with:
# command apt-get install libapache2-mod-php5
# command a2enmod php5 # command type -f 'service' &>'/dev/null' && command service 'apache2' 'force-reload'
# command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'force-reload'
Administration
The following commands are available to manage the Apache 2 server :
- a2enmod: Enable a module (the available modules configurations are in '/etc/apache2/mods-available').
- a2dismod: Disable an active module (the enabled modules configurations are in '/etc/apache2/mods-enabled')
- a2ensite: Enable a site (the available sites configurations are in '/etc/apache2/sites-available')
- a2dissite: Disable a site (the enabled sites configurations are in '/etc/apache2/sites-enabled')
- apache2ctl: Advanced administration tool for Apache 2.
Test Apache 2 configuration (prevent server crashs due to errors in configuration) :
# command apache2ctl -t
Reload server configuration without interrupting the service :
# command type -f 'service' &>'/dev/null' && command service 'apache2' 'reload'
# command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'reload'
Reload the server configuration by restarting the server without closing existing connections (no HTTP error) :
# command type -f 'service' &>'/dev/null' && command service 'apache2' 'force-reload'
# command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'force-reload'
Reload the server configuration by closing existing connections (a HTTP error is displayed to the user) :
# command type -f 'service' &>'/dev/null' && command service 'apache2' 'restart'
# command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'restart'
List enabled Apache 2 modules :
# command apache2ctl -t -D DUMP_MODULES
References
- The Apache HTTP Server Version 2.2 Documentation is an almost mandatory read if you often edit Apache 2 configuration.
- For a advanced use of mod_rewrite, read "Apache mod_rewrite".
These books can help you:
- Apache Cookbook: Solutions and Examples for Apache Administrators
- Apache 2 Pocket Reference: For Apache Programmers & Administrators (Pocket Reference (O'Reilly))
- Apache Security
- ModSecurity Handbook
Thanks
- Thanks to George Notaras (en) for SSL-enabled Name-based Apache Virtual Hosts with mod_gnutls (en).
- Thanks to Alsacréations (fr) for Installation d'Apache et PHP (fr).
- Thanks to la Ferme du Web (fr) for .htaccess - Quelques astuces bien pratiques à connaître (fr).
- Thanks to Desidia (fr) for Enjoliver le listage de fichiers par Apache (fr).