🌐 Module L19 – Apache sur Debian 13

📘 Cours complet ⏱️ 2h30 🎯 Bloc 2 – Administration Linux
Objectifs : installer et configurer Apache2, maîtriser l'arborescence, gérer les modules et créer un VirtualHost fonctionnel sur Debian 13.

📖 Introduction

Apache HTTP Server (apache2 sous Debian) est le serveur Web le plus utilisé au monde. Dans le cadre du BTS SIO SISR, sa maîtrise est essentielle pour la mise à disposition de services web en interne ou en externe. Ce module couvre son installation sur Debian 13, sa structure de fichiers, les commandes de gestion et la création d'un VirtualHost.

📌 Debian 13 (Trixie) : Le paquet s'appelle apache2. Il utilise systemd pour le démarrage et la structure sites-available / sites-enabled pour la gestion des hôtes virtuels.
🎯

À l'issue de ce module, vous serez capable de :

  • Installer et démarrer le service Apache2 sur Debian 13.
  • Connaître l'arborescence essentielle (/etc/apache2/, /var/www/, logs).
  • Utiliser les commandes a2ensite, a2dissite, a2enmod, apache2ctl.
  • Créer, activer et tester un VirtualHost nommé.
  • Gérer les permissions et le pare-feu ufw.

🔍 Architecture et arborescence

Apache2 sous Debian 13 suit une organisation claire qui sépare la configuration, les sites web et les logs.

CheminRôleContenu typique
/etc/apache2/Répertoire de configuration principal.apache2.conf, ports.conf, dossiers sites-available, mods-available...
/etc/apache2/sites-available/Fichiers de configuration des VirtualHosts (inactifs par défaut).000-default.conf, mon-site.conf
/etc/apache2/sites-enabled/Liens symboliques vers sites-available (sites actifs).Lien vers 000-default.conf
/etc/apache2/mods-available/Modules disponibles (fichiers .load et .conf).ssl.load, rewrite.load
/etc/apache2/mods-enabled/Modules actuellement chargés.Liens symboliques des modules activés.
/var/www/Racine des documents web (DocumentRoot).html/, dossiers de vos sites.
/var/log/apache2/Fichiers de logs (accès et erreurs).access.log, error.log
/usr/sbin/apache2ctlUtilitaire de contrôle avancé d'Apache.Test de config, start, stop, graceful.

🛠️ Installation d'Apache2

1. Mise à jour et installation

sudo apt update
sudo apt install apache2 -y

Le service démarre automatiquement et est activé au boot.

2. Vérification du service

sudo systemctl status apache2
sudo systemctl enable apache2
  • systemctl status apache2 : vérifie que le service est active (running).
  • systemctl enable apache2 : s'assure que le service démarre au boot (souvent déjà fait par l'installation).

3. Pare-feu – Autoriser HTTP/HTTPS

sudo ufw allow 'Apache Full'
sudo ufw status

Ouverture des ports 80 (HTTP) et 443 (HTTPS) via le profil UFW prédéfini.

4. Test initial

Ouvrez un navigateur et accédez à l'IP du serveur :

http://192.168.1.10

Vous devez voir la page par défaut « It works! » (fichier /var/www/html/index.html).

📋 Commandes essentielles

CommandeDescription
sudo systemctl start apache2Démarre le service Apache.
sudo systemctl stop apache2Arrête le service Apache.
sudo systemctl restart apache2Redémarre le service (coupure brutale).
sudo systemctl reload apache2Recharge la configuration sans couper les connexions.
sudo apache2ctl configtestVérifie la syntaxe des fichiers de configuration.
sudo a2ensite mon-site.confActive un VirtualHost (crée un lien dans sites-enabled).
sudo a2dissite mon-site.confDésactive un VirtualHost.
sudo a2enmod rewriteActive un module (ex: rewrite).
sudo a2dismod rewriteDésactive un module.
sudo apache2ctl -SAffiche la configuration complète des VirtualHosts chargés.
💡 Bonne pratique : Après chaque modification de configuration, exécutez toujours sudo apache2ctl configtest avant de recharger Apache. Cela évite de bloquer le serveur avec une syntaxe erronée.

🌐 Création d'un VirtualHost

Un VirtualHost permet d'héberger plusieurs sites web sur une même machine physique en se basant sur le nom de domaine (ServerName) ou l'adresse IP.

Étape 1 – Créer l'arborescence du site

sudo mkdir -p /var/www/mon-site/public_html
sudo chown -R $USER:$USER /var/www/mon-site/public_html
sudo chmod -R 755 /var/www/mon-site
  • mkdir -p : crée les dossiers parents si nécessaire.
  • chown $USER:$USER : donne la propriété à l'utilisateur courant pour l'édition.
  • chmod 755 : le propriétaire a tous les droits, le groupe et les autres peuvent lire/exécuter.

Étape 2 – Créer une page d'accueil

nano /var/www/mon-site/public_html/index.html

Contenu exemple :

<html>
  <body>
    <h1>Bienvenue sur mon-site.local</h1>
    <p>VirtualHost configuré avec succès !</p>
  </body>
</html>

Étape 3 – Créer le fichier de configuration

sudo nano /etc/apache2/sites-available/mon-site.conf

Contenu du fichier :

<VirtualHost *:80>
    ServerAdmin webmaster@mon-site.local
    ServerName mon-site.local
    ServerAlias www.mon-site.local
    DocumentRoot /var/www/mon-site/public_html

    <Directory /var/www/mon-site/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mon-site-error.log
    CustomLog ${APACHE_LOG_DIR}/mon-site-access.log combined
</VirtualHost>
  • <VirtualHost *:80> : écoute sur toutes les IPs, port 80.
  • ServerName : nom de domaine principal du site.
  • ServerAlias : alias acceptés (sous-domaines, www...).
  • DocumentRoot : chemin vers les fichiers du site.
  • <Directory> : règles de sécurité appliquées au dossier.
  • AllowOverride All : autorise les fichiers .htaccess.
  • Require all granted : autorise l'accès à tout le monde.
  • ErrorLog / CustomLog : fichiers de log dédiés au site.

Étape 4 – Activer le site et recharger Apache

sudo a2ensite mon-site.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
  • a2ensite : crée un lien symbolique de sites-available vers sites-enabled.
  • a2dissite 000-default.conf : désactive le site par défaut pour éviter les conflits.
  • apache2ctl configtest : vérifie la syntaxe avant rechargement.
  • reload : applique les changements sans interruption de service.

Étape 5 – Résolution DNS locale (test)

Sur la machine cliente (ou le serveur lui-même pour un test local), éditez :

sudo nano /etc/hosts

Ajoutez la ligne :

192.168.1.10    mon-site.local    www.mon-site.local

Puis testez avec :

curl http://mon-site.local
# ou dans le navigateur : http://mon-site.local
⚠️

Attention aux permissions

Apache s'exécute sous l'utilisateur www-data. Si vous rencontrez des erreurs 403 Forbidden, vérifiez que www-data a le droit de lecture sur DocumentRoot et que l'option Require all granted est bien présente dans le bloc <Directory>.

🧪 Mise en pratique guidée

Scénario : Mettre en ligne un site interne « intranet.sio.local »

1. Préparation

sudo mkdir -p /var/www/intranet/public_html
sudo chown -R $USER:$USER /var/www/intranet/public_html
sudo chmod -R 755 /var/www/intranet

2. Page HTML

echo "<h1>Intranet SIO</h1><p>Bienvenue sur le réseau interne.</p>"   > /var/www/intranet/public_html/index.html

3. Configuration du VirtualHost

sudo nano /etc/apache2/sites-available/intranet.conf

Collez la configuration adaptée (voir modèle ci-dessus) avec ServerName intranet.sio.local et DocumentRoot /var/www/intranet/public_html.

4. Activation et test

sudo a2ensite intranet.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Vérifiez avec curl http://intranet.sio.local après avoir ajouté l'entrée dans /etc/hosts.

📝 Exercices d'application

Exercice 1 – QCM rapide

Quelle commande permet de vérifier la syntaxe de la configuration Apache avant rechargement ?

sudo apache2ctl configtest (ou apache2ctl -t). Elle analyse tous les fichiers de configuration et retourne Syntax OK si tout est correct, ou le détail de l'erreur sinon.

Exercice 2 – Création complète

Créez un VirtualHost pour le domaine blog.sio.local avec :

# 1. Arborescence
sudo mkdir -p /var/www/blog/public_html
sudo chown -R $USER:$USER /var/www/blog/public_html
sudo chmod -R 755 /var/www/blog

# 2. Page d'accueil
echo "<h1>Mon Blog SIO</h1>" > /var/www/blog/public_html/index.html

# 3. Fichier de configuration
sudo nano /etc/apache2/sites-available/blog.conf

Contenu de blog.conf :

<VirtualHost *:80>
    ServerAdmin admin@sio.local
    ServerName blog.sio.local
    DocumentRoot /var/www/blog/public_html

    <Directory /var/www/blog/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/blog-error.log
    CustomLog ${APACHE_LOG_DIR}/blog-access.log combined
</VirtualHost>
# 4. Activation
sudo a2ensite blog.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

🎯 Quiz d'auto‑évaluation

1. Le paquet à installer pour Apache sous Debian 13 s'appelle httpd.

2. La commande sudo a2ensite mon-site.conf active un VirtualHost.

3. Le répertoire /var/www/html est le DocumentRoot par défaut d'Apache2 sous Debian.

4. sudo systemctl reload apache2 coupe brutalement toutes les connexions actives.

5. La directive Require all granted dans un bloc Directory autorise l'accès à tout le monde.

📚 Ressources


← Retour au portail
BTS SIO – Lycée NDLP Avranches – Module L19 v1.0