Sommaire
🐧 Module L19 – Apache sur Debian 13
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.
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.
| Chemin | Rôle | Contenu 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/apache2ctl | Utilitaire 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 estactive (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
| Commande | Description |
|---|---|
sudo systemctl start apache2 | Démarre le service Apache. |
sudo systemctl stop apache2 | Arrête le service Apache. |
sudo systemctl restart apache2 | Redémarre le service (coupure brutale). |
sudo systemctl reload apache2 | Recharge la configuration sans couper les connexions. |
sudo apache2ctl configtest | Vérifie la syntaxe des fichiers de configuration. |
sudo a2ensite mon-site.conf | Active un VirtualHost (crée un lien dans sites-enabled). |
sudo a2dissite mon-site.conf | Désactive un VirtualHost. |
sudo a2enmod rewrite | Active un module (ex: rewrite). |
sudo a2dismod rewrite | Désactive un module. |
sudo apache2ctl -S | Affiche la configuration complète des VirtualHosts chargés. |
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 desites-availableverssites-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 :
- DocumentRoot :
/var/www/blog/public_html - Un fichier
index.htmlpersonnalisé - Des logs dédiés
- Le site activé et le site par défaut désactivé
# 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.