Apache2 : Installation de votre premier serveur Web

Tutoriel Apache

Tutorial Thumbnail

Apache est probablement le serveur HTTP le plus populaire de la génération des administrateurs systÚmes. Apparu en 1995, c'est donc lui qui met à disposition la plupart des sites Web du World Wide Web (WWW). Il est produit par la Apache Software Foundation. C'est un logiciel libre fourni sous la licence spécifique Apache.


Apache est un serveur applicatif HTTP ou serveur web trÚs connu et utilisé sur le marché. La plupart des sites internet proposés sont gérés par Apache. Au début des années 2000, Apache était la seule alternative fiable et gratuite au serveur HTTP de Netscape proposé à l'époque. Depuis lors, de nombreux autres logiciels utiles pour le World Wide Web ont été développés parallÚlement aux serveurs HTTP. Apache est assez répandu pour sa facilité d'intégration et sa trÚs grande communauté, due à son ancienneté.



Apache est conçu pour prendre en charge de nombreux modules lui fournissant des fonctionnalités supplémentaires comme l'intégration de modules tels que PHP, Python ou Perl par exemple. De plus, il prend en charge le principe du serveur proxy et le module de réécriture d'URL.


Cependant, il faut noter que la prĂ©sence d'un grand nombre de modules Apache alourdie les performances du serveur et complique ainsi la configuration du serveur web. Les bonnes pratiques recommandent de ne charger que les modules nĂ©cessaires Ă  vos besoins car on trouve souvent de nombreuses failles de sĂ©curitĂ© qui n'affectent le serveur et les modules de Apache, comme la faille de sĂ©curitĂ© CVE-2021-41773 POC qui permet d’accĂ©der au contenu du fichier /etc/passwd avec une simple requĂȘte HTTP sous les versions Apache2.4.49 et 2.4.50.


Dans ce tutoriel, nous allons voir ensemble dans un premier temps l'installation simple du serveur Web Apache2, son fonctionnement au niveau de l'architecture des fichiers de configuration.


Prérequis

Dans ce tutoriel, nous allons aborder la partie installation et configuration du serveur, pour obtenir ensuite un super serveur Web en proposant ainsi une page Web Ă  nos visiteurs.


Afin de réaliser l'installation de Apache2 sur votre serveur, quelques prérequis sont nécessaires de NGINX :

  • Une machine Linux : Ubuntu, Debian ou autre distribution.
  • 1 cƓur CPU.
  • 200MB de mĂ©moire vive (RAM) de disponible.
  • 4GB de libre sur le disque.
  • Permissions sudo.

Dans notre laboratoire, nous aurons une machine Debian 11 qui fera office de serveur Web Apache et une machine sous Windows 11 qui fera office de client Web.


Installation d'Apache

Allez, on est parti dÚs à présent pour l'installation du serveur sur une machine Linux Debian 11.

Dans un premier temps, on s'assure de mettre à jour la liste des dépÎts et les mises à jours systÚme :

sudo apt update
sudo apt upgrade


Ensuite, au niveau de l'installation de Apache2, elle se fait trĂšs simplement depuis le gestionnaire de paquet APT :

sudo apt install apache2


Nous pouvons vérifier l'état des services en cours d'exécution de Apache2 et ainsi que sa version installée :

ps -ef | grep apache2
apache -v



On vérifie si Apache2 est démarré (avec systemctl) :

systemctl status apache2


De plus, nous pouvons tester les ports d'Ă©coute de la machine, notamment celui de Apache2 (port 80 HTTP) :

sudo netstat -tunlp


Une fois l'installation et en essayant de se rendre depuis un navigateur Web sur le serveur Web Apache2, vous devriez déjà voir la page par défaut de Apache2 s'afficher. Cette page indique que le serveur Apache2 fonctionne convenablement. La page par défaut de Apache2 se situe dans le dossier par défaut de Apache2 dans /var/www/html.


Commandes utiles

Pour arrĂȘter le service Apache2 :

sudo service apache2 stop


Pour lancer le service Apache2 :

sudo service apache2 start


Pour redémarrer le service Apache2 :

sudo service apache2 restart


Pour recharger la configuration de Apache2 :

sudo service apache2 reload


Pour voir la version d'Apache utilisée :

sudo apache2ctl -v


Pour tester l'ensemble de la configuration d'Apache :

sudo apache2ctl -t


Pour tester la configuration des hĂŽtes virtuels :

sudo apache2ctl -t -D DUMP_VHOSTS


Pour voir les modules de Apache chargés :

sudo apache2ctl -M



Fonctionnement du serveur web Apache

Lorsqu'il dĂ©marre, Apache charge ses fichiers de configuration et se met en attente de requĂȘtes sur les interfaces rĂ©seaux. On dit qu'il Ă©coute certains ports (listen en anglais) : en gĂ©nĂ©ral, Apache Ă©coute le port 80 pour les communications HTTP, et le port 443 pour les communications en HTTPS.



Lorsqu'on utilise un navigateur web, que l'on clique sur un lien ou qu'on rentre directement une URL dans la barre d'adresse, on effectue alors une requĂȘte :

  • Le navigateur rĂ©sout le nom de domaine (il obtient l'adresse IP du serveur).
  • Il envoie une requĂȘte HTTP avec la mĂ©thode GET Ă  l'IP du serveur sur le port 80 (ou HTTPS sur le port 443) pour lui demander de retourner un contenu particulier.
  • Le serveur HTTP reçoit la requĂȘte, et en fonction de divers paramĂštres (URL appelĂ©e, configuration du serveur, etc.), va chercher un contenu dans un fichier ou lance un script (PHP) qui va gĂ©nĂ©rer un contenu.
  • Le serveur renvoie ce contenu Ă  l'IP du navigateur.
  • Le navigateur traite le contenu et le rend accessible Ă  l'internaute (en l'affichant Ă  l'Ă©cran par ex.).



Les fichiers de configuration d'Apache

Un seul serveur Apache permet de déployer simultanément plusieurs sites et services qu'il faut configurer individuellement.

Pour plus de clarté, la configuration d'Apache2 est morcelée. Toutefois, tous les fichiers de configuration se situent dans le répertoire /etc/apache2 :


Configuration globale :

  • apache2.conf est le fichier de configuration principal d'Apache. Normalement il n'a pas Ă  ĂȘtre modifiĂ©. Toute la configuration devrait se faire dans les sous dossiers xxx-available
  • envvars contient les variables d'environnement utilisĂ©es par Apache
  • ports.conf liste les ports d'Ă©coute d'Apache


Configuration des sites (VirtualHost) :

  • sites-available contient les fichiers de configuration des sites disponibles
  • sites-enabled contient des liens symboliques vers les configurations des sites activĂ©s (liens vers site-available)


Configuration des autres services (Alias, ...) :

  • conf-available contient les fichiers de configuration des autres services disponibles
  • conf-enabled contient des liens symboliques vers les configurations des autres services activĂ©s(liens vers conf-available)


Configuration des modules :

  • mods-available contient les fichiers de configuration des modules d'Apache disponibles
  • mods-enabled contient des liens symboliques vers les configurations des modules activĂ©s (liens vers mods-available)


Les diverses configurations sont activées (a2en pour Apache 2 enable) ou désactivées (a2dis pour Apache 2 disable) avec les commandes suivantes :

sudo a2ensite [configuration d'un site Ă  activer]
sudo a2dissite [configuration d'un site à désactiver]

sudo a2enconf [configuration d'un service Ă  activer]
sudo a2disconf [configuration d'un service à désactiver]

sudo a2enmod [configuration d'un module Ă  activer]
sudo a2dismod [configuration d'un module à désactiver]


Cela aura pour effet de créer ou supprimer les liens symboliques correspondants dans les répertoires xxx-enabled.

Apache prendra alors en compte, ou pas, les fichiers de configuration concernés aprÚs rechargement :

sudo service apache2 reload


Modification du site web principal d'Apache

L'objectif est maintenant de créer un nouveau site web dans Apache. Ce nouveau site remplacera le site web par défaut. Les fichiers de ce site seront stockés dans un répertoire particulier dans /var/www/public. De plus, ce site sera un VirtualHost (hÎte virtuel) qui écoutera sur le port 80.


Désactivation du site Web par défaut

AprÚs installation, il n'y a qu'un seul site actif 000-default, fichier de configuration 000-default.conf, dans le répertoire /etc/apache2/sites-enabled :

ls -l /etc/apache2/sites-enabled/


Ce répertoire contient un lien symbolique (un raccourci) qui pointe vers le véritable fichier de configuration, présent dans le dossier /etc/apache/sites-available/000-default.conf.


On désactive le site par défaut de Apache2 créé dans le fichier 000-default.conf :

sudo a2dissite 000-default


On recharge ensuite la configuration de Apache :

sudo service apache2 reload


Création du dossier racine physique pour le nouveau site

Pour notre nouveau site, nous souhaitons créer le dossier racine du site /var/www/public

sudo mkdir /var/www/public


Pour copier les fichiers de votre site web dans /var/www/public/ il faut que l'utilisateur vemotech (qui sera l'utilisateur qui permettra d'accéder aux fichiers du site) doit posséder les droits d'écriture dans ce dossier.


Apache accĂšde aux fichiers des sites web sous le nom d'utilisateur www-data . Il faut que cet utilisateur ait les accĂšs en lecture et puisse lire le contenu de ce dossier.


On modifie alors les droits d'accĂšs pour obtenir :

  • Un utilisateur propriĂ©taire : vemotech en RWX ;
  • Un groupe propriĂ©taire : www-data en R-X (utilisateur d'Apache)
  • Les autres : aucun accĂšs
sudo chown -R vemotech:www-data /var/www/public/
sudo chmod -R 750 /var/www/public/


Ce qui donne maintenant les droits suivants :




Création d'un nouveau VirtualHost sur le port 80

Apache permet de déployer simultanément plusieurs sites. Chaque site est soit un VirtualHost soit un Alias. Ici, vous allez créez un VirtualHost qui écoute sur le port 80. La configuration du VirtualHost se fera dans un fichier dédié /etc/apache2/sites-available/public.conf


On créé le fichier de configuration pour notre site "Public" :

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


Voici un exemple d'une configuration d'un VirtualHost afin de proposer un site HTTP :

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName cosmotech.cf
    ServerAlias www.cosmotech.cf
    
    DocumentRoot "/var/www/public"
    
    <Directory "/var/www/public">
        Options +FollowSymLinks -Indexes
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog /var/log/apache2/error.public.log
    CustomLog /var/log/apache2/access.public.log combined
</VirtualHost>


Dans l'Ă©diteur Nano : Ctrl+O pour sauvegarder, puis Ctrl+X pour quitter.


Un peu d'explications de la configuration d'Apache pour ce VirtualHost :

  • <VirtualHost *:80> : DĂ©claration du virtualhost. Il doit rĂ©pondre aux requĂȘtes qui s'adressent Ă  toutes les adresses IP (*) du serveur sur le port 80. Doc sur VirtualHost.
  • ServerName cosmotech.cf : Cet hĂŽte virtuel sera seulement appelĂ© pour le nom de domaine example.com

  • ServerAlias www.cosmotech.cf : pour le sous-domaine www.cosmotech.cf. On peut spĂ©cifier ici d'autres noms de domaine en les sĂ©parant par un espace. On peut aussi utiliser *.cosmotech.cf pour inclure tous les sous-domaines.
  • ServerAdmin [email protected] : Adresse E-mail administrative de Apache2, destinĂ©e aux utilisateurs. Par exemple en PHP, cette valeur peut ĂȘtre atteignables via les variables serveurs ($_SERVER['SERVER_ADMIN']).
  • DocumentRoot "/var/www/public" : Chemin absolu vers le dossier racine du site web
  • <Directory "/var/www/public"> : Regroupe un ensemble de directives qui ne s'appliquent qu'au rĂ©pertoire concernĂ©, Ă  ses sous-rĂ©pertoires, et Ă  leur contenu. Doc sur Directory
  • Options +FollowSymLinks : ajoute l'option de nĂ©gociation de contenu (sert par ex. pour dĂ©tecter la langue du navigateur et fournir automatiquement le contenu dans la bonne langue)
  • Options -Indexes : dĂ©sactive l'affichage du contenu des dossiers si aucun fichier index.html n'y est prĂ©sent.
  • AllowOverride All : autorise l'utilisation des fichiers .htaccess dans l'arborescence du site web. Doc sur AllowOverride, Doc sur .htaccess
  • Require all granted : autorise l'accĂšs Ă  distance au site web. Doc sur require

Une fois les modifications enregistrées, on active le nouveau VirtualHost :

sudo a2ensite public


Tester la configuration actuelle de Apache :

sudo apache2ctl configtest 


On recharge la configuration de Apache et et on vérifie ensuite que le nouveau site apparaisse dans la liste des VirtualHost chargés et actifs dans Apache :

sudo service apache2 reload
sudo a2query -s


Fichiers journaux

Si vous avez un problÚme lors du rechargement de la configuration de Apache, vérifiez si vous n'avez pas fait d'erreurs de syntaxes :

systemctl status apache2.service


Nous remarquons dans cet exemple que l'utilisateur a effectué une erreur de syntaxe à la ligne 4 du fichier /etc/apache/sites-enabled/public.conf.


Les fichiers journaux de Apache2 sont directement hébergés par défaut dans le dossier /var/log/apache2. Deux fichiers distincts sont proposés :

  • Le fichier access.log : contient l'ensemble des fichiers journaux des requĂȘtes d'accĂšs au serveur Web, regroupant l’état de rĂ©ussite des demandes et le temps nĂ©cessaire au serveur pour rĂ©pondre
  • Le fichier error.log : contient les erreurs survenues lors de la configuration de Apache2, les erreurs HTTP dĂ©clenchĂ©es (erreurs 403 - Interdit ; 404 - Introuvable...), des modules ajoutĂ©s comme PHP, qui affiche les erreurs de syntaxes.

Les noms des deux fichiers sont définit lors de la configuration du Virtual Host de Apache2 :

ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined


Dans notre configuration actuelle, notre fichier d'accĂšs se situe dans /var/log/apache2/access.public.log et notre dossier des erreurs sont dans /var/log/apache2/error.public.log.


Pour la lecture des fichiers journaux, utilisez :

tail -f /var/log/apache2/{access ou error}.log

Cette commande permettra d'afficher en temps réel les derniÚres données enregistrées dans les fichiers journaux de Apache.


Aperçu du résultat :



N'hĂ©sitez pas Ă  vous rendre sur les logs si une erreur particuliĂšre est dĂ©clarĂ©e : c'est une habitude Ă  prendre pour comprendre ce qui ne se passe pas correctement et ĂȘtre indĂ©pendant.


Notre premier site

Afin d'effectuer un test de bon fonctionnement, nous allons créer un fichier index.html dans le dossier racine du site avec le contenu HTML suivant :

<!DOCTYPE html>
<html lang="fr">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Mon site public avec Apache2 !</title>
</head>
<body><h1>Notre site public en HTTP avec Apache fonctionne !</h1>
</body>
</html>


Pour rappel, pas besoin de recharger Apache, le fichier est directement accessible :


Le fichier .htaccess

En plus des fichiers de configuration situés dans /etc/apache2, Apache nous permet également de définir une configuration tierce pour certains répertoires en plaçant des fichiers appelés .htaccess directement à cÎté d'autres fichiers de contenu Web (par défaut, un point au début d'un nom de fichier en fait un fichier caché).


Les directives de chaque fichier .htaccess s'appliquent au répertoire dans lequel il se trouve et à tous ses descendants (sous-répertoires, sous-répertoires enfant, etc.).


Il s'agit de la directive AllowOverride spĂ©cifiĂ©e dans la section <Directory> d'un hĂŽte virtuel, qui dĂ©finit si les fichiers .htaccess doivent ĂȘtre pris en compte pour ce rĂ©pertoire et ses descendants. Il peut prendre la valeur All ou None.


Exemple d'un fichier de configuration .htaccess, présent dans le dossier racine du site (/var/ww/public) :

## HTACESS EXAMPLE FILE - VEMOTECH ##

## On masque la signature du serveur (présent dans les messages d'erreurs)
ServerSignature Off

## On empeche la lecture du cotenu des répertoires du site
Options -Indexes

## Insérer le fuseau horaire
SetEnv TZ Europe/Paris

## DĂ©finition du codage de caractĂšres des pages
AddDefaultCharset utf-8

## Pages d'erreurs personnalisées locales
ErrorDocument 401 / errors/401.php
ErrorDocument 403 / errors/403.php
ErrorDocument 404 / errors/404.php
ErrorDocument 500 / errors/500.php



Ces fichiers sont assez intéressants afin de redéfinir des paramÚtres ou définir dynamiquement des rÚgles propres à certaines solutions web, comme la réécriture d'URL, sur des serveurs mutualisés que vous n'avez pas accÚs à gérer.


Activer le mode Rewrite dans Apache

Dans les cas gĂ©nĂ©raux, vous utiliserez souvent les fichiers htaccess. En effet, si vous essayez de crĂ©er ce fichier portant le nom .htaccess dans le dossier racine de votre site et contenant une configuration particuliĂšre, une erreur est survenue.


Dans notre cas, Apache n'a pas activĂ© le module de rĂ©Ă©criture qui gĂšre les redirections, mais il Ă©tait quand mĂȘme installĂ©. Ceci peut ĂȘtre rĂ©alisĂ© en analysant simplement le dossier /etc/apache2/mods-available. Donc, pour l'activer, nous devons mettre le fichier de configuration du module dans le dossier mods-enabled. Il y a une petite commande pour le faire sans avoir Ă  utiliser ln -s


On active alors le module rewrite de Apache, pour la réécriture d'URL, utile pour les framework PHP dans les fichiers .htaccess :

sudo a2enmod rewrite


On redémarre le service Apache2 :

sudo service apache2 restart


On vérifie que le module rewrite doit apparaitre dans la liste des modules chargés dans Apache :

sudo apache2ctl -M


Et voilĂ , Ă  prĂ©sent vous avez un premier serveur Web fonctionnel sous Apache2. Il peut ĂȘtre intĂ©ressant de se pencher sur la question de la mise en place d'un site en HTTPS, envisager l'intĂ©gration du module PHP et aborder le principe des serveurs Proxies 😉

Niveau DĂ©butant

Technologie utilisée :

Proposer une modification
Antoine
Par Antoine
Rédigé le Samedi 01 Octobre 2022