Installez le serveur web libre Apache httpd

Dans ce chapitre, vous allez apprendre à installer et configurer le serveur web Apache httpd. Un serveur web, c’est le logiciel qui répond et renvoie les pages HTML à votre navigateur quand vous consultez un site Internet. Comme de plus en plus de services passent par le Web, c’est vraiment une composante essentielle à connaître pour un administrateur.

Apache existe depuis plus de 20 ans, et même s’il perd des parts de marché depuis quelques années, il reste le serveur web le plus utilisé au monde : c’est la référence à connaître. Son principal concurrent aujourd’hui est un autre logiciel libre appelé Nginx, que vous découvrirez aussi dans la suite de ce cours.

Commencez par installer Apache par la commande :

$ sudo apt-get install apache2

Je vais vous faire une visite guidée des fichiers de configuration.

Découvrez la configuration d’Apache

Sous Ubuntu, vous trouverez la configuration d’Apache dans le répertoire  /etc/apache2/  . La configuration est ensuite découpée en un grand nombre de fichiers. Le fichier principal se nomme  apache2.conf  . Comme c’est souvent le cas pour les fichiers de configuration, les lignes commençant par un  #  sont des commentaires, et ce fichier est abondamment commenté. Il y a beaucoup de paramètres, parmi ceux-ci vous trouverez :

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

qui définissent l’utilisateur et le groupe sous lesquels tourne Apache. Vous voyez que les valeurs sont des variables. La valeur réelle est configurée à part dans le fichier  envvars  , c’est dans ce fichier que vous pourrez la changer.

En fait, le processus principal d’Apache est lancé en tant que root,  mais ce processus a pour seul rôle de lancer des processus fils appartenant à l’utilisateur indiqué ci-dessus. Ce sont alors ces processus fils qui s’occuperont de répondre aux requêtes des clients. Ces processus fils ont des droits limités aux fonctions qu’ils doivent accomplir (accès réseau, accès aux fichiers du serveur web, etc.). Si vous devez changer l’utilisateur et le groupe par défaut, il est important en termes de sécurité de garder un utilisateur dédié à Apache.

Vous trouverez ensuite la configuration des logs :

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common

Vous pouvez définir le fichier de log utilisé pour stocker les logs d’erreur Apache (directive  ErrorLog  ), le niveau de verbosité des logs (  LogLevel  ) et différents formats de logs définis par la directive  LogFormat  . Pour cette dernière, différents formats sont préconfigurés, leur nom se trouve en second paramètre en fin de ligne. En cas de besoin, vous pouvez définir vos propres formats de logs à partir des clés commençant par des  %  , et dont vous trouverez la liste dans la documentation Apache.

Ce fichier de configuration inclut le fichier  ports.conf  qui contient la fameuse directive :

Listen 80

Elle indique à Apache d’écouter sur toutes les interfaces sur le port 80 (port par défaut pour HTTP). Si vous voulez restreindre votre service à une interface en particulier, vous pouvez par exemple écrire :

Listen 127.0.0.1:8080

pour écouter seulement sur l’interface locale sur le port 8080. Il peut y avoir plusieurs directives  Listen  .

Finalement, ce fichier inclut aussi tous les fichiers de configuration placés dans :

  • conf-enabled/

  • mods-enabled/

  • sites-enabled/

Le principe de fonctionnement est que vous trouverez dans :

  • conf-available/  les fichiers de configuration additionnels installĂ©s sur le système ;

  • mods-available/  les modules installĂ©s et leur configuration ;

  • sites-available/  les configurations des diffĂ©rents sites.

Pour chacun de ces fichiers et pour activer la fonction correspondante, il faudra faire un lien symbolique du type  XXXX-enabled/YYYY.conf  ->  XXXX-available/YYYY.conf  . Comme ça, pour activer/désactiver une fonction, il suffit de faire/supprimer des liens symboliques. En plus, vous verrez plus loin qu’Ubuntu vous fournit des commandes pour faire ces liens automatiquement.

La conception d’Apache est modulaire et permet d’ajouter ou d’enlever à la volée les fonctionnalités nécessaires. Ce principe s’applique même aux fonctions qui forment le cœur du logiciel. Ainsi, vous trouverez dans  mods-available  trois modules du type  mpm_*.load  . Ces MultiProcessing Modules définissent la manière dont Apache va gérer les connexions HTTP. Pour fonctionner, Apache a besoin qu’un et un seul de ces modules soit chargé. Voici le détail de ces modules :

  • prefork : avec ce module, Apache crĂ©e un processus fils pour chaque nouvelle connexion. C’est le plus sĂ»r mais pas toujours le plus performant, car il est long et gourmand en mĂ©moire de gĂ©rer autant de processus.

  • worker : avec ce module, chaque processus fils d’Apache peut gĂ©rer plusieurs connexions dans des “threads”. C’est gĂ©nĂ©ralement mieux en terme de performances, mais ça peut poser des problèmes avec les applications web qui gèrent mal ces threads.

  • event : c’est le module le plus rĂ©cent et celui choisi par dĂ©faut sous Ubuntu. C’est une Ă©volution de worker qui permet de mieux gĂ©rer les connexions “keepalive”. Ces connexions permettent de faire plusieurs requĂŞtes HTTP Ă  travers une mĂŞme connexion rĂ©seau.

Je vous conseille de garder le MPM “event”, sauf si vous utilisez une application non compatible avec les threads (non-threadsafe) ; dans ce cas, utilisez “prefork”. Vous allez maintenant configurer votre premier site statique, et le MPM event conviendra très bien.

Configurez votre premier site web sous Apache

Apache est capable de gérer plusieurs sites web sur la même machine, c’est ce qu’on appelle des hôtes virtuels ou virtual hosts. Dans la requête que fera le client sur la machine, un en-tête HTTP précisera si le client veut plutôt consulter toto.com ou tata.org, qui sont tous les deux hébergés sur la machine. La configuration de chaque virtual host se fait dans un fichier  *.conf  dans  /etc/apache2/sites-available/  . Créez donc le fichier  /etc/apache2/sites-available/01-www.example.com.conf  contenant les paramètres suivants :

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html/www.example.com

    CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined
    ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log

    <Directory /var/www/html/www.example.com>
        Options All
        AllowOverride None
    </Directory>
</VirtualHost>    

Tout d’abord, remarquez que la configuration d’un virtual host est comprise dans des balises “type HTML”  <VirtualHost *:80></VirtualHost>  . Le  *:80  de la balise ouvrante indique que le virtual host peut être utilisé sur le port 80 sur toutes les interfaces. Voici ensuite le détail des directives utilisées :

  • ServerName  : prĂ©cise l’hĂ´te pour lequel cette configuration sera utilisĂ©e. Il ne peut y avoir qu’un  ServerName  par VirtualHost.

  • ServerAlias  : il ne peut y avoir qu’un ServerName mais par contre, vous pouvez complĂ©ter par autant de ServerAlias que vous voulez, sĂ©parĂ©s par des espaces.

  • ServerAdmin  : indique une adresse mail de contact et qui peut ĂŞtre affichĂ©e sur certains messages d’erreur.

  • DocumentRoot  : c’est la racine de l’arborescence de votre site web, lĂ  oĂą vous mettrez tous vos fichiers.

Une configuration minimale pourrait s’arrêter là, les autres directives sont des options supplémentaires.

  • CustomLog  : demande de stocker les fichiers de logs au format  combined  dans un fichier Ă  part plutĂ´t que dans le fichier de logs gĂ©nĂ©ral.

  • ErrorLog  : demande de stocker aussi les logs d’erreur dans un fichier Ă  part, mais leur format est fixe.

  • <Directory />  : dans la balise Directory, vous pouvez dĂ©finir des règles qui s’appliquent uniquement au contenu d’un rĂ©pertoire. Ici, vous activez toutes les options. Voici une partie des options activĂ©es :

    • ExecCGI  : l’exĂ©cution de scripts Ă  l’aide du module CGI est permise.

    • FollowSymlinks  : le serveur va suivre les liens symboliques. Cette option est la seule active par dĂ©faut.

    • Includes  : les inclusions cĂ´tĂ© serveur Ă  l’aide du module  mod_include  sont autorisĂ©es.

    • Indexes  : si aucun fichier par dĂ©faut type  index.html  n’est prĂ©sent, le module  mod_autoindexes  va prĂ©senter une liste des fichiers et rĂ©pertoires formatĂ©e par Apache.

  • AllowOverride None  : cette directive placĂ©e dans  <Directory />  indique qu’aucune option ne peut ĂŞtre surchargĂ©e par les options qui seraient contenues dans un fichier appelĂ©  .htaccess  placĂ© dans cette arborescence. Vous auriez pu prĂ©ciser une Ă  une les options qui peuvent ĂŞtre surchargĂ©es, ou utiliser  All  pour autoriser la surcharge de toutes les options : dans ce cas, les options du fichier  .htaccess  auront la prioritĂ© sur celles du Virtual Host.

Pour pouvoir tester votre site web, il vous reste Ă  :

  • CrĂ©er la racine de votre arborescence et y dĂ©poser un premier fichier  .html  :

$ sudo mkdir /var/www/html/www.example.com/
$ sudo cp /var/www/html/index.html /var/www/html/www.example.com
  • Activer la configuration de votre VirtualHost :

$ sudo a2ensite 01-www.example.com

Cette commande crée automatiquement le lien symbolique du répertoire  sites-enabled  vers le répertoire  sites-available  .

  • Recharger maintenant la configuration d’Apache pour prendre en compte vos modifications :

$ sudo systemctl reload apache2

Votre serveur est prêt. Maintenant si vous ajoutez  www.example.com  en alias à votre serveur dans le fichier  /etc/hosts  de votre client, vous pouvez admirer la page d’accueil de votre site dans votre navigateur.

Capture d'écran d'un navigateur sur le client affichant la page d'accueil d'Apache à l'adresse http://www.example.com
La page d'accueil d'Apache qui montre que votre site web est opérationnel.

En résumé

  • Apache httpd est le serveur web le plus utilisĂ© au monde.

  • La configuration d’Apache est dĂ©coupĂ©e en plusieurs fichiers qui se trouvent tous dans  /etc/apache2  .

  • La manière dont Apache gère les connexions est dĂ©finie par les modules MPM. Il doit y avoir un et un seul module MPM actif Ă  la fois.

  • Les modules MPM les plus courants sous Linux s’appellent “event” (par dĂ©faut), “worker” et “prefork”.

  • Apache peut hĂ©berger plusieurs sites web derrière une seule IP sous forme d’hĂ´tes virtuels (Virtual Hosts).

Dans le chapitre suivant, vous apprendrez à sécuriser votre serveur web Apache.

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best