Pour bien démarrer avec Apache HTTPD, nous allons voir son installation et sa première configuration jusqu’à afficher une page HTML statique.
Nous allons partir d’un serveur sous Ubuntu 24. 04 fraîchement installés. Ce dernier servira de base à la totalité de la suite de ces articles.
Pour modifier les fichiers de configuration, j’utilise le logiciel Vim. Si vous avez besoin de le prendre en main, j’ai fait un petit article que vous pouvez trouver ici : Bien démarrer avec Vim en 5 étapes.
Table des Matières
Installer Apache HTTPD
Pour bien démarrer avec Apache HTTPD, il faut d’abord l’installer. Cette installation est simple et se fait directement avec le gestionnaire de paquets.
gabriel@serveurweb:~$ sudo apt install apache2 Lecture des listes de paquets... Fait Construction de l'arbre des dépendances... Fait Lecture des informations d'état... Fait Les paquets supplémentaires suivants seront installés : apache2-bin apache2-data apache2-utils libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64 liblua5.4-0 ssl-cert Paquets suggérés : apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser Les NOUVEAUX paquets suivants seront installés : apache2 apache2-bin apache2-data apache2-utils libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64 liblua5.4-0 ssl-cert 0 mis à jour, 10 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 2 080 ko dans les archives. Après cette opération, 8 091 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer ? [O/n] o Réception de :1 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libapr1t64 amd64 1.7.2-3.1build2 [107 kB] Réception de :2 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1t64 amd64 1.6.3-1.1ubuntu7 [91,9 kB] Réception de :3 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1-dbd-sqlite3 amd64 1.6.3-1.1ubuntu7 [11,2 kB] Réception de :4 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1-ldap amd64 1.6.3-1.1ubuntu7 [9 116 B] Réception de :5 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 liblua5.4-0 amd64 5.4.6-3build2 [166 kB] Réception de :6 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-bin amd64 2.4.58-1ubuntu8.1 [1 327 kB] Réception de :7 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-data all 2.4.58-1ubuntu8.1 [163 kB] Réception de :8 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-utils amd64 2.4.58-1ubuntu8.1 [96,2 kB] Réception de :9 http://fr.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2 amd64 2.4.58-1ubuntu8.1 [90,2 kB] Réception de :10 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 ssl-cert all 1.1.2ubuntu1 [17,8 kB] 2 080 ko réceptionnés en 1s (3 866 ko/s) Préconfiguration des paquets... Sélection du paquet libapr1t64:amd64 précédemment désélectionné. (Lecture de la base de données... 83864 fichiers et répertoires déjà installés.) Préparation du dépaquetage de .../0-libapr1t64_1.7.2-3.1build2_amd64.deb ... Dépaquetage de libapr1t64:amd64 (1.7.2-3.1build2) ... Sélection du paquet libaprutil1t64:amd64 précédemment désélectionné. Préparation du dépaquetage de .../1-libaprutil1t64_1.6.3-1.1ubuntu7_amd64.deb ... Dépaquetage de libaprutil1t64:amd64 (1.6.3-1.1ubuntu7) ... Sélection du paquet libaprutil1-dbd-sqlite3:amd64 précédemment désélectionné. Préparation du dépaquetage de .../2-libaprutil1-dbd-sqlite3_1.6.3-1.1ubuntu7_amd64.deb ... Dépaquetage de libaprutil1-dbd-sqlite3:amd64 (1.6.3-1.1ubuntu7) ... Sélection du paquet libaprutil1-ldap:amd64 précédemment désélectionné. Préparation du dépaquetage de .../3-libaprutil1-ldap_1.6.3-1.1ubuntu7_amd64.deb ... Dépaquetage de libaprutil1-ldap:amd64 (1.6.3-1.1ubuntu7) ... Sélection du paquet liblua5.4-0:amd64 précédemment désélectionné. Préparation du dépaquetage de .../4-liblua5.4-0_5.4.6-3build2_amd64.deb ... Dépaquetage de liblua5.4-0:amd64 (5.4.6-3build2) ... Sélection du paquet apache2-bin précédemment désélectionné. Préparation du dépaquetage de .../5-apache2-bin_2.4.58-1ubuntu8.1_amd64.deb ... Dépaquetage de apache2-bin (2.4.58-1ubuntu8.1) ... Sélection du paquet apache2-data précédemment désélectionné. Préparation du dépaquetage de .../6-apache2-data_2.4.58-1ubuntu8.1_all.deb ... Dépaquetage de apache2-data (2.4.58-1ubuntu8.1) ... Sélection du paquet apache2-utils précédemment désélectionné. Préparation du dépaquetage de .../7-apache2-utils_2.4.58-1ubuntu8.1_amd64.deb ... Dépaquetage de apache2-utils (2.4.58-1ubuntu8.1) ... Sélection du paquet apache2 précédemment désélectionné. Préparation du dépaquetage de .../8-apache2_2.4.58-1ubuntu8.1_amd64.deb ... Dépaquetage de apache2 (2.4.58-1ubuntu8.1) ... Sélection du paquet ssl-cert précédemment désélectionné. Préparation du dépaquetage de .../9-ssl-cert_1.1.2ubuntu1_all.deb ... Dépaquetage de ssl-cert (1.1.2ubuntu1) ... Paramétrage de ssl-cert (1.1.2ubuntu1) ... Created symlink /etc/systemd/system/multi-user.target.wants/ssl-cert.service → /usr/lib/systemd/system/ssl-cert.service. Paramétrage de libapr1t64:amd64 (1.7.2-3.1build2) ... Paramétrage de liblua5.4-0:amd64 (5.4.6-3build2) ... Paramétrage de apache2-data (2.4.58-1ubuntu8.1) ... Paramétrage de libaprutil1t64:amd64 (1.6.3-1.1ubuntu7) ... Paramétrage de libaprutil1-ldap:amd64 (1.6.3-1.1ubuntu7) ... Paramétrage de libaprutil1-dbd-sqlite3:amd64 (1.6.3-1.1ubuntu7) ... Paramétrage de apache2-utils (2.4.58-1ubuntu8.1) ... Paramétrage de apache2-bin (2.4.58-1ubuntu8.1) ... Paramétrage de apache2 (2.4.58-1ubuntu8.1) ... Enabling module mpm_event. Enabling module authz_core. Enabling module authz_host. Enabling module authn_core. Enabling module auth_basic. Enabling module access_compat. Enabling module authn_file. Enabling module authz_user. Enabling module alias. Enabling module dir. Enabling module autoindex. Enabling module env. Enabling module mime. Enabling module negotiation. Enabling module setenvif. Enabling module filter. Enabling module deflate. Enabling module status. Enabling module reqtimeout. Enabling conf charset. Enabling conf localized-error-pages. Enabling conf other-vhosts-access-log. Enabling conf security. Enabling conf serve-cgi-bin. Enabling site 000-default. Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /usr/lib/systemd/system/apache2.service. Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /usr/lib/systemd/system/apache-htcacheclean.service. Traitement des actions différées (« triggers ») pour ufw (0.36.2-6) ... Traitement des actions différées (« triggers ») pour man-db (2.12.0-4build2) ... Traitement des actions différées (« triggers ») pour libc-bin (2.39-0ubuntu8.2) ... Scanning processes... Scanning linux images... Running kernel seems to be up-to-date. No services need to be restarted. No containers need to be restarted. No user sessions are running outdated binaries. No VM guests are running outdated hypervisor (qemu) binaries on this host.
L’installateur démarrera automatiquement le serveur Web.
gabriel@serveurweb:~$ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled) Active: active (running) since Tue 2024-06-25 09:18:11 UTC; 1min 10s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 1860 (apache2) Tasks: 55 (limit: 1671) Memory: 5.4M (peak: 5.6M) CPU: 50ms CGroup: /system.slice/apache2.service ├─1860 /usr/sbin/apache2 -k start ├─1863 /usr/sbin/apache2 -k start └─1864 /usr/sbin/apache2 -k start juin 25 09:18:11 serveurweb systemd[1]: Starting apache2.service - The Apache HTTP Server... juin 25 09:18:11 serveurweb systemd[1]: Started apache2.service - The Apache HTTP Server.
Cependant, si vous tapez l’adresse de votre serveur dans votre navigateur Web, cela ne fonctionnera pas. En effet, le pare-feu fait son office et comme aucun port correspondant à la navigation Web (le port 80 pour le protocole http et le port 443 pour le protocole https) n’est ouvert dans le pare-feu, ce dernier refuse toute connexion.
Nous allons donc les ouvrir.
gabriel@serveurweb:~$ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) gabriel@serveurweb:~$ sudo ufw allow http Rule added Rule added (v6) gabriel@serveurweb:~$ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6)
Configurer Apache HTTPD
Par le défaut, le logiciel fournit une configuration opérationnelle. Il y a deux principaux dossiers :
- /var/www/html : il s’agit du répertoire par défaut où sera stocké le site
- /etc/apache2 : c’est le répertoire où se trouve la totalité de la configuration du serveur.
C’est dans ce dossier que nous allons faire la majorité des modifications. Durant la totalité de cet article, j’utiliserai l’éditeur en ligne de commande Vim.
Bien que cela soit possible, nous vous déconseillons de changer le répertoire par défaut de stockage des sites. Les systèmes modernes sont livrés avec des logiciels d’isolation telle que la AppArmor ou SeLinux. Modifier ce répertoire nécessite la modification de la configuration de ces outils qui ne sera pas abordé dans cette suite d’articles. Si vous avez besoin d’espace, vous pouvez utiliser la méthode déployée par de nombreux professionnels qui consistent à monter un volume au niveau de ce répertoire.
Pour bien démarrer avec Apache HTTPD, nous allons voir son installation et sa première configuration jusqu’à afficher une page HTML statique.
Astuce : un conseil qui n’est pas spécifique à Apache HTTPD, avant de faire une quelconque modification sur un fichier de configuration, je vous conseille de faire une copie du fichier en le nommant de la même manière avec l’extension.old ou.back. Certains aussi rajoutent la date de la sauvegarde.
Pour bien démarrer avec Apache HTTPD, il faut savoir où se trouve sa configuration. La configuration principale se trouve dans apache2.conf. Dans cette suite d’articles, vous n’aurez pas à la modifier. Nous allons surtout travailler dans les deux répertoires suivants :
- mods-available : qui contient tous les modules disponibles
- sites-available : qui contient toutes les configurations des sites disponibles.
Ces dossiers ne sont pas pris en compte par le serveur HTTPD. Ce dernier ne prend en compte que le contenu des dossiers suivants :
- mods-enabled : qui contient la totalité des modules activés
- sites-enabled : qui contient la totalité des sites activés.
Bien qu’il soit possible de copier les fichiers entre les répertoires, ou bien faire des liens symboliques, il existe des commandes fournies par le logiciel HTTPD qui permette de le faire. Nous les verrons dans les prochaines étapes. Pour bien démarrer avec Apache HTTPD, je vous conseille vivement de toujours passer par ces dernières.
Note : certains modules peuvent faire appel à des logiciels externes. La configuration est généralement faite au niveau de ses logiciels externes et seul l’activation du module et présente dans la configuration HTTPD. C’est notamment le cas de PHP.
Gérer un site Web
Un site Web, qu’il soit dynamique ou statique, doit être activé pour être disponible. Comme vous avez pu le voir, un site par défaut est créé dans le répertoire HTML. Ce dernier n’a pour vocation que de confirmer le bon fonctionnement du serveur. Pour des raisons de sécurité, il est vivement recommandé de le désactiver voire de le supprimer.
Pour bien démarrer avec Apache HTTPD, nous allons voir les différentes étapes nécessaires pour l’activation d’un site Web.
Activer un site
1é re étape
Pour bien démarrer avec Apache HTTPD, il est nécessaire de mettre les fichiers du site dans le répertoire voulu. Dans mon exemple, nous allons mettre tout simplement une page HTML de base affichant juste Mon super site et le nom du site. Nous la mettrons dans un répertoire que nous nommerons site1 et qui se trouve dans /var/www/admin-libre/.
gabriel@serveurweb:/var/www/admin-libre$ sudo -u www-data mkdir site1 gabriel@serveurweb:/var/www/admin-libre$ cd site1 gabriel@serveurweb:/var/www/admin-libre/site1$ sudo -u www-data vim index.html <!DOCTYPE html> <html lang="fr"> <meta charset="UTF-8"> <title>Page Acueil Site 1</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <body> Mon super site site1.admin-libre.fr </body> </html>
Note : Le fait d’utiliser sudo -u www-data permet d’avoir immédiatement le bon propriétaire de fichier. En effet, il est indispensable que l’utilisateur www-data est accès aux fichiers du site pour pouvoir fonctionner correctement.
Astuce : je vous conseille de nommer les répertoires en fonction soit du nom de domaine, soit de la fonctionnalité que vous souhaitez implémenter avec le site. Cela vous facilitera la maintenance mais aussi la recherche de panne.
2éme étape
Pour bien démarrer avec Apache HTTPD, il faut configurer Apache HTTPD. Pour cela nous allons créer un nouveau fichier de configuration que nous allons nommer du nom du site. Vu que nous n’avons pas besoin d’options particulières, nous allons utiliser directement la configuration fournie par défaut pour un site. Bien entendu, si vous installez un logiciel Web, vous devrez vérifier dans la procédure d’installation de ce logiciel que ce dernier ne demande pas des options spécifiques. Si c’est le cas, c’est dans ce fichier qu’il faudra les mettre.
gabriel@serveurweb:~$cat /etc/apache2/sites-available/site1.conf <VirtualHost *:80> ServerName site1.admin-libre.fr ServerAdmin webmaster@admin-libre.fr DocumentRoot /var/www/admin-libre/site1 <Directory "/var/www/admin-libre/site1"> Require all granted AllowOverride All Options FollowSymLinks MultiViews </Directory> ErrorLog ${APACHE_LOG_DIR}/error_site1al.log CustomLog ${APACHE_LOG_DIR}/access_site1al.log combined </VirtualHost>
Plusieurs directives sont extrêmement importantes :
- ServerName : il s’agit du nom du site, en la majorité des cas au format adresse Web, même s’il peut être au format adresse IP suivi du nom du dossier.
- ServerAdmin : il s’agit du courriel de l’administrateur du site.
- DocumentRoot : il s’agit du dossier contenant les fichiers Web.
- <Directory « /var/www/admin-libre/site1 »>… </Directory> : fournit les droits nécessaires pour le bon fonctionnement du site. Ceux de cet exemple sont dérivés d’un site existant.
- ErrorLog et CustomLog : bien qu’on en obligatoire, ces directives permettent de de mettre les logs Apache dans des fichiers différents des fichiers de base de logs Apache. Cela simplifie grandement la lecture des logs en cas de problème sur le site.
Il existe de très nombreuses directives, nous en verrons d’autres lors de l’activation du SSL.
Attention : la totalité des directives que je vous donne ainsi que leurs exemples sont conçus pour les systèmes Linux. Certaines directives Windows sont spécifiques. Si vous utilisez Apache sous Windows, je vous conseille de regarder la documentation directement sur le site d’Apache.
3éme étape
Pour bien démarrer avec Apache HTTPD, nous allons activer le site. Pour cela nous allons utiliser la commande a2enable suivi du nom du fichier de configuration.
gabriel@serveurweb:~$ sudo a2ensite site1 Enabling site site1. To activate the new configuration, you need to run: systemctl reload apache2
4éme étape
Pour bien démarrer avec Apache HTTPD, il est nécessaire de recharger la configuration ou de redémarrer le serveur apache HTTPD. Si vous ne le faites pas, le site restera indisponible.
gabriel@serveurweb:~$ sudo systemctl reload apache2
Comme dans mon cas, j’ai activé une entrée DNS pour le site, je peux le contacter directement avec eux son adresse Web. C’est toujours une bonne chose de vérifier que tout fonctionne.
Note : s’il y a un problème dans le fichier de configuration de votre site, Apache2 refusera de recharger la configuration ou de redémarrer.
Désactiver un site
Si vous souhaitez désactiver un site, de manière temporaire ou permanente, il suffit d’utiliser la commande suivante.
gabriel@serveurweb:~$ sudo a2dissite site1 Site site1 disabled. To activate the new configuration, you need to run: systemctl reload apache2
Tout comme l’activation, il faut penser à recharger la configuration ou redémarrer le serveur apache HTTPD pour la prise en compte de la désactivation.
gabriel@serveurweb:~$ sudo systemctl reload apache2
Pour bien démarrer avec Apache HTTPD, vous pouvez considérer que si la suppression est définitive, vous pouvez supprimer le fichier de configuration ainsi que les fichiers du site.
Gérer plusieurs sites
Apache HTTPD peut gérer un nombre important de sites en même temps. S’il est possible de regrouper la totalité des configurations des sites dans un seul fichier, cela n’est pas recommandé. Il vaut mieux avoir un fichier de configuration par site.
Pour bien démarrer avec Apache HTTPD, chaque site doit disposer :
- D’un répertoire dédié dans lequel sera mis les fichiers du site.
- D’un nom de site unique qui peut être soit du type sous domaine. Domaine. Extension de domaine ou bien du type adresse IP/nom du dossier/
- D’un fichier de configuration.
Note : il n’est pas obligé de spécifier un port différent pour chaque site. Mais, ce n’est pas interdit non plus. Tout dépendra de l’utilisation que vous souhaitez faire. L’utilisation d’un port différent peut être une alternative au nom unique de site.
La procédure d’activation ou de désactivation est la même quel que soit le nombre de sites gérés.
gabriel@serveurweb:/var/www/admin-libre$ sudo -u www-data mkdir site2 gabriel@serveurweb:/var/www/admin-libre$ cd site2 gabriel@serveurweb:/var/www/admin-libre/site2$ sudo -u www-data vim index.html <!DOCTYPE html> <html lang="fr"> <meta charset="UTF-8"> <title>Page Acueil Site 1</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <body> Mon super site site1.admin-libre.fr </body> </html> gabriel@serveurweb:~$cat /etc/apache2/sites-available/site2.conf <VirtualHost *:80> ServerName site2.admin-libre.fr ServerAdmin webmaster@admin-libre.fr DocumentRoot /var/www/admin-libre/site2 <Directory "/var/www/admin-libre/site2"> Require all granted AllowOverride All Options FollowSymLinks MultiViews </Directory> ErrorLog ${APACHE_LOG_DIR}/error_site2al.log CustomLog ${APACHE_LOG_DIR}/access_site2al.log combined </VirtualHost> gabriel@serveurweb:~$ sudo a2ensite site2 Enabling site site2. To activate the new configuration, you need to run: systemctl reload apache2 gabriel@serveurweb:~$ sudo systemctl reload apache2
Gérer un module
Pour bien démarrer avec Apache HTTPD, nous allons aborder la gestion des modules. Apache est livré par défaut avec de très nombreux modules. La majorité ne sont pas activés et d’autres nécessitent d’être installés avant d’être activé. Ces modules permettent d’interfacer de nombreuses fonctionnalités externes avec le serveur Web. Parmi les modules les plus connus, il y a celui qui gère le PHP. Nous l’aborderons lors de l’installation de PHP. Mais il y a aussi par exemple WebDav ou CalDav qui permette les échanges de fichiers de calendrier.
Il existe trois principales commandes à connaître :
Lister tous les modules activés :
gabriel@serveurweb:~$ sudo apachectl -M Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) filter_module (shared) mime_module (shared) mpm_prefork_module (shared) negotiation_module (shared) reqtimeout_module (shared) setenvif_module (shared) status_module (shared)
Activer un module :
gabriel@serveurweb:~$ sudo a2enmod nom_module
Désactiver un module :
gabriel@serveurweb:~$ sudo a2dismod nom_module
Pour bien démarrer avec Apache HTTPD, nous allons activer le module qui permet de paralléliser le traitement des demandes. Cela permet d’accélérer les sites Web. Dans cet exemple, vous ne devriez pas avoir de différence. Cependant, on peut considérer que c’est un prérequis à l’installation de PHP, même si ce n’est pas obligatoire.
Sur de nombreuses distributions, apache est activé avec le module prefork. Ce dernier est le module historique. C’est aussi celui qui est considéré le plus stable, car il ne possède pas de système de thread. Les principaux défauts sont sa consommation en mémoire et un maximum de requêtes traitables en parallèle bien plus faible que le module event ou worker.
Dans la dernière version d’Ubuntu 24. 04 server, le module event est activé par défaut. Il n’y a donc rien à faire. Si vous êtes sur une version plus ancienne d’Ubuntu ou une autre distribution voici comment on peut faire l’installation :
gabriel@serveurweb:~$ sudo a2dismod mpm_prefork Module mpm_prefork disabled. To activate the new configuration, you need to run: systemctl restart apache2 gabriel@serveurweb:~$ sudo a2enmod mpm_event Considering conflict mpm_worker for mpm_event: Considering conflict mpm_prefork for mpm_event: Enabling module mpm_event. To activate the new configuration, you need to run: systemctl restart apache2 gabriel@serveurweb:~$ sudo systemctl restart apache2 gabriel@serveurweb:~$ sudo apachectl -M Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) filter_module (shared) mime_module (shared) mpm_event_module (shared) negotiation_module (shared) reqtimeout_module (shared) setenvif_module (shared) status_module (shared)
Conclusion
Nous voici arrivés à la fin de cet article sur comment bien démarrer avec Apache HTTPD en cinq étapes. Vous avez maintenant un ou deux sites opérationnels. Le prochain article vous montrera comment activer le SSL avec les services de Let’s Encrypt.