Installation et configuration de Apache2 sur serveur Debian

Sa modularité et son grand nombre de configurations possibles font d'Apache un serveur HTTP très répandu.
Cet article à pour but de vous présenter la mise en place et la configuration basique d'un serveur Apache2 dans sa version apache2-mpm-worker.

Pré-requis / Difficultés

Nous verrons dans ce guide l'installation de la version mpm-worker d'Apache. C'est une version multi-thread permettant de gérer un grand nombre de connexion avec une faible consommation de ressources.

Les lignes de commandes suivantes doivent être saisie dans un terminal en tant que super-administrateur (utilisateur root).

Ce tuto a été testé sur les distributions Debian suivantes

  • Version 7 : Wheezy
  • Version 8 : Jessie
  • Version 9 : Stretch
  • Version 10 : Buster

Difficulté
Facile

Installation des paquets Apache2

Depuis Debian Stretch, la version mpm-worker est la version installée par défaut sur les distributions Debian. Le paquet apache2-mpm-worker a été renommé en apache2 depuis cette version.
Nous testons donc la présence du paquet apache2-mpm-worker et s'il est absent nous installons le paquet apache2.

if [ -n "$(command apt-cache pkgnames apache2-mpm-worker)" ]; then
  apt-get install apache2-mpm-worker
else
  apt-get install apache2
fi

Activation du module mod_rewrite

Le module mod_rewrite fournit un moteur de réécriture à base de règles permettant de réécrire les URLs des requêtes à la volée. Nous allons activer cette extension

a2enmod rewrite

Puis nous relançons le service apache2 pour prendre en compte l'activation de l'extension mod_rewrite.

service 'apache2' 'force-reload'

Activation des hôtes virtuels (NameVirtualHost)

Les hôtes virtuels (NameVirtualHost) permettent d'héberger plusieurs noms de domaines sur une même adresse IP.

[[ -z "$(command grep 'NameVirtualHost.*:80' /etc/apache2/ports.conf)" ]] \
    && sed -i -e '/Listen[\t ]*80/i\
<IfVersion < 2.4>\
  NameVirtualHost *:80\
</IfVersion>' '/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}")" ]] \
    && sed -i -e 's/\(VirtualHost[ \t]*\*\)>/\1:80>/g' \
        -e 's/^\(NameVirtualHost.*\)$/#\1/g' \
      "${default_site}"

Puis nous relançons le service apache2 pour prendre en compte l'activation des NameVirtualHost.

service 'apache2' 'force-reload'

Voilà, le serveur HTTP est configuré à minima sur votre serveur. Si vous entrer l'URL de votre serveur dans un navigateur, vous devez avoir une page affichant ceci :

Configuration pour un site internet

Nous verrons maintenant comment configurer votre serveur HTTP. Dans un premier temps, nous allons définir les variables pour configurer correctement votre site :

  • NOM_SITE : Préciser le nom de domaine de votre site, ici www1.zonewebmaster.eu.
  • MAIL_ADMIN : Votre adresse mail.
  • URI_SITE : Chemin de l'emplacement des fichiers composant votre site web. Vous pouvez laisser la valeur par défaut.
  • URI_LOG : Chemin où sont enregistrés les fichiers logs du site. Vous pouvez laisser la valeur par défaut.
NOM_SITE="www1.zonewebmaster.eu"
MAIL_ADMIN="webmaster@zonewebmaster.eu"
URI_SITE="/home/${NOM_SITE}/www/"
URI_LOG="/home/${NOM_SITE}/logs/"

Ensuite nous créons les répertoires et fichiers nécessaires au fonctionnement de votre futur site et nous leurs attribuons les droits adéquats : Par défaut, les répertoires suivants sont créés :

  • /home/nom_site/
  • /home/nom_site/www/
  • /home/nom_site/logs/
if [ ! -e "/home/${NOM_SITE} " ]; then
    mkdir "/home/${NOM_SITE}"
    mkdir "${URI_SITE}"
    mkdir "${URI_LOG}"
    chown www-data:www-data "${URI_SITE}"
    touch "${URI_LOG}access.log"
    touch "${URI_LOG}error.log"
    echo "page OK" > "${URI_SITE}index.html"
    chown www-data:www-data "${URI_SITE}index.html"
else
    if [ ! -e "${URI_SITE}" ]; then
        mkdir "${URI_SITE}"
        chown www-data:www-data "${URI_SITE}"
    fi
    if [ ! -e "${URI_LOG}" ]; then
        mkdir "${URI_LOG}"
    fi
    touch "${URI_LOG}access.log"
    touch "${URI_LOG}error.log"
    echo "page OK" > "${URI_SITE}index.html"
    chown www-data:www-data "${URI_SITE}index.html"
fi

Ensuite nous créons le fichier de configuration pour Apache2, le fichier de configuration est enregistré dans le répertoire /etc/apache2/sites-available.

echo "<VirtualHost *:80>
        ServerAdmin ${MAIL_ADMIN}
        ServerName ${NOM_SITE}
        DocumentRoot ${URI_SITE}
        <Directory ${URI_SITE}>
                Options -Indexes +FollowSymLinks +MultiViews
                AllowOverride All
                Require all granted
        </Directory>
        ErrorLog ${URI_LOG}error.log
        LogLevel warn
        CustomLog ${URI_LOG}access.log combined
</VirtualHost>" > /etc/apache2/sites-available/${NOM_SITE}.conf

Puis nous activons le site :

a2ensite ${NOM_SITE}

Pour finir, nous mettons en place la rotation des logs du site

echo "
${URI_LOG}*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}
" > "/etc/logrotate.d/${NOM_SITE}"

On recharge la configuration et c'est sensé fonctionner sans problème.

service 'apache2' 'force-reload'

Redirection des mails www-data

Nous allons rediriger les mails envoyés à l'utilisateur www-data vers le compte root:

[[ -e '/etc/aliases' && -z "$(command grep '^www-data:' '/etc/aliases' )" ]] \
    && ${cmdProxy} sed -i -e '/^root:/i\
www-data: root' \
      '/etc/aliases'

Puis nous rechargeons la liste des alias :

type -f 'newaliases' &>'/dev/null' && newaliases

Pour allez plus loin


Notes de version

  • [24/02/2020] : Création de l'article

Auteurs et sources