• 15 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

Ce cours existe en livre papier.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 03/09/2019

Le service web

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Vous commencez à connaître quelques services indispensables avec le DHCP et le DNS.
Le service que nous allons voir maintenant n'est pas indispensable au fonctionnement des réseaux, mais il est aujourd'hui le fondement même d'Internet, j'ai nommé : le web.

Nous allons voir dans ce chapitre comment mettre en place un serveur web et le configurer.

Description du service

Le service web est LE service d'Internet. C'est celui qui permet d'héberger des serveurs web, et donc de vous proposer des pages à lire comme le Site du Zéro ou Facebook.

Nous allons voir comment mettre en place un serveur web et le configurer pour qu'il puisse proposer des pages aux internautes.

Principe du web

Le fonctionnement du web s'appuie sur le protocole applicatif HTTP.
Comme les autres protocoles que nous avons étudiés, HTTP a un mode de fonctionnement bien spécifique... que nous n'étudierons pas ici. :o
En effet, ce qui nous intéresse, c'est surtout de savoir utiliser la navigation, mais pas de la comprendre en détail, du moins pas pour l'instant.

Le protocole HTTP

Plutôt que d'essayer de comprendre en détail le protocole HTTP, nous allons voir ce qu'il permet de faire.

Si vous avez bien suivi le tuto de M@teo21 sur HTML/CSS vous savez qu'une page web est composée de balises HTML.
Le principe du protocole HTTP est de transporter ces pages HTML, et potentiellement quelques informations supplémentaires.

Le serveur web met donc à disposition les pages web qu'il héberge, et le protocole HTTP les transporte sur le réseau pour les amener au client.

Nous allons donc mettre en œuvre un serveur web qui permettra de mettre à disposition des internautes nos pages web !

Les différents serveurs web

Il existe de nombreux serveurs web sur le marché.

Le plus connu est Apache et il est utilisé par une majorité de sites sur Internet.
Les chiffres parlent d'eux-mêmes, voici l'utilisation des différents serveurs à travers le monde :

Serveurs web les plus utilisés (source: W3techs.com)
Serveurs web les plus utilisés (source: W3techs.com)

Toutefois, si l'on regarde plus précisément les évolutions des serveurs, on se rend compte que la tendance n'est pas à la progression pour Apache :

Graph représentant l'utilisation des serveurs web (source: netcraft)
Graph représentant l'utilisation des serveurs web (source: netcraft)

Le serveur nginx a notamment vécu une très belle progression depuis 2007, car il offre des performances souvent meilleures qu'Apache.

Cependant, pour notre mise en place, nous allons opter pour Apache qui reste le serveur numéro un. Vous pourrez si vous le souhaitez essayer un autre serveur, comme nginx, mais la configuration est souvent très différente d'un serveur à l'autre.

C'est parti pour l'installation !

Mise en place et configuration

Installation et configuration d'Apache

Installation d'Apache

Sous Debian, l'installation d'une application est extrêmement simplifiée avec l'utilisation de apt.
Vous pouvez donc vous mettre sur votre machine virtuelle sous Linux et entrer les commandes suivantes :
On met d'abord à jour notre liste de packages.
# apt-get update

Ensuite, on installe apache2 qui est la dernière version d'Apache.
# apt-get install apache2

À cet instant, vous avez un serveur Apache en état de fonctionnement. Cependant, nous allons aller plus loin pour permettre à ce serveur d’interpréter du langage PHP et nous allons installer aussi ce qu'il faut pour pouvoir parler avec une base de données :
# apt-get install libapache2-mod-php5 php5-mysql

Notre serveur étant installé, nous allons vérifier qu'il est bien en écoute :

# netstat -antp | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      381/apache2

Le service est bien en écoute, nous pouvons tester pour voir ce qui est présenté.
Pour cela, nous allons simplement faire pointer notre navigateur sur l'adresse IP de notre machine virtuelle :

Page d'Apache par défaut
Page d'Apache par défaut

Nous voyons bien la page par défaut du serveur Apache, ça marche !

Nous allons maintenant regarder comment configurer notre serveur pour pouvoir afficher nos propres sites web.

Configuration d'Apache2

Comme habituellement sous Unix, les fichiers de configuration se trouvent dans le répertoire /etc.
Pour Apache2, ils sont dans le répertoire... apache2. Rien de bien original. :p

Regardons le contenu de ce répertoire :

# cd /etc/apache2
# ls -la
total 76
drwxr-xr-x  7 root root  4096 Aug 30  2012 .
drwxr-xr-x 88 root root  4096 Mar 19 23:19 ..
-rw-r--r--  1 root root  7994 Jan  1  2011 apache2.conf
drwxr-xr-x  2 root root  4096 Mar 16  2011 conf.d
-rw-r--r--  1 root root  1169 Jan  1  2011 envvars
-rw-r--r--  1 root root     0 Mar 16  2011 httpd.conf
-rw-r--r--  1 root root 31063 Jan  1  2011 magic
drwxr-xr-x  2 root root  4096 Mar 16  2011 mods-available
drwxr-xr-x  2 root root  4096 Mar 16  2011 mods-enabled
-rw-r--r--  1 root root   750 Jan  1  2011 ports.conf
drwxr-xr-x  2 root root  4096 Sep 26 15:09 sites-available
drwxr-xr-x  2 root root  4096 Sep  4  2012 sites-enabled

Nous voyons ici différents fichiers et répertoires plus ou moins importants.
Nous allons les parcourir.

Tout d'abord, il faut savoir qu'avant Apache2 il y avait Apache et qu'à peu près toutes les informations de configuration étaient dans un seul et unique fichier, httpd.conf.
Cela posait quelques problèmes, car ce fichier devenait un peu un fourre-tout dans lequel il était difficile de savoir où certaines informations étaient situées et s'il n'y avait pas des informations redondantes.

Pour Apache2, ce fichier de configuration a été séparé en plusieurs parties.
Le point de départ est le fichier apache2.conf.

Ce fichier contient un certain nombre de directives importantes, ainsi que les inclusions (Includes) des autres fichiers de configuration.
Cependant, il n'y a pas de directives qui nous intéressent dans ce fichier. Si vous souhaitez vous spécialiser dans l'utilisation d'Apache et comprendre chacun des directives, la documentation officielle vous tend les bras.

Par contre, les includes en fin de fichier nous donnent une idée des parties de la configuration qui sont en dehors de apache2.conf, et qui vont pouvoir nous intéresser :

# Include module configuration:
Include mods-enabled/*.load
Include mods-enabled/*.conf

# Include all the user configurations:
Include httpd.conf

# Include ports listing
Include ports.conf

#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
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
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
Include conf.d/

# Include the virtual host configurations:
Include sites-enabled/

Nous voyons d'abord l'inclusion de modules.
En effet, Apache est un service modulaire. Cela veut dire que l'on peut lui ajouter des modules qui viennent lui ajouter des fonctionnalités particulières.
Par exemple, Apache peut jouer le rôle de proxy. Pour cela, il faut lui ajouter le module mod_proxy.
On peut ainsi ajouter toutes sortes de fonctionnalités à Apache.

Sans le savoir, nous avons déjà ajouté un module à Apache en installant libapache2-mod-php5 qui est le module de prise en compte du langage PHP par notre serveur Apache2.

Nous avons deux lignes includes pour les modules :

# Include module configuration:
Include mods-enabled/*.load
Include mods-enabled/*.conf

Ceci nous indique qu'Apache va prendre en compte les fichiers .load et .conf situés dans le répertoire mods-enabled (qui est lui-même dans /etc/apache2, puisque c'est notre répertoire de travail).

Allons donc voir ce qui est contenu dans le répertoire mods-enabled :

# ls -la
total 2
drwxr-xr-x 2 root root 1024 21 mars  19:26 .
drwxr-xr-x 7 root root 1024 21 mars  19:24 ..
lrwxrwxrwx 1 root root   28 21 mars  19:24 alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root   28 21 mars  19:24 alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root   33 21 mars  19:24 auth_basic.load -> ../mods-available/auth_basic.load
lrwxrwxrwx 1 root root   33 21 mars  19:24 authn_file.load -> ../mods-available/authn_file.load
lrwxrwxrwx 1 root root   36 21 mars  19:24 authz_default.load -> ../mods-available/authz_default.load
lrwxrwxrwx 1 root root   38 21 mars  19:24 authz_groupfile.load -> ../mods-available/authz_groupfile.load
lrwxrwxrwx 1 root root   33 21 mars  19:24 authz_host.load -> ../mods-available/authz_host.load
lrwxrwxrwx 1 root root   33 21 mars  19:24 authz_user.load -> ../mods-available/authz_user.load
lrwxrwxrwx 1 root root   32 21 mars  19:24 autoindex.conf -> ../mods-available/autoindex.conf
lrwxrwxrwx 1 root root   32 21 mars  19:24 autoindex.load -> ../mods-available/autoindex.load
lrwxrwxrwx 1 root root   26 21 mars  19:26 cgi.load -> ../mods-available/cgi.load
lrwxrwxrwx 1 root root   30 21 mars  19:24 deflate.conf -> ../mods-available/deflate.conf
lrwxrwxrwx 1 root root   30 21 mars  19:24 deflate.load -> ../mods-available/deflate.load
lrwxrwxrwx 1 root root   26 21 mars  19:24 dir.conf -> ../mods-available/dir.conf
lrwxrwxrwx 1 root root   26 21 mars  19:24 dir.load -> ../mods-available/dir.load
lrwxrwxrwx 1 root root   26 21 mars  19:24 env.load -> ../mods-available/env.load
lrwxrwxrwx 1 root root   27 21 mars  19:24 mime.conf -> ../mods-available/mime.conf
lrwxrwxrwx 1 root root   27 21 mars  19:24 mime.load -> ../mods-available/mime.load
lrwxrwxrwx 1 root root   34 21 mars  19:24 negotiation.conf -> ../mods-available/negotiation.conf
lrwxrwxrwx 1 root root   34 21 mars  19:24 negotiation.load -> ../mods-available/negotiation.load
lrwxrwxrwx 1 root root   27 21 mars  19:26 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root   27 21 mars  19:26 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root   33 21 mars  19:24 reqtimeout.conf -> ../mods-available/reqtimeout.conf
lrwxrwxrwx 1 root root   33 21 mars  19:24 reqtimeout.load -> ../mods-available/reqtimeout.load
lrwxrwxrwx 1 root root   31 21 mars  19:24 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root   31 21 mars  19:24 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root root   29 21 mars  19:24 status.conf -> ../mods-available/status.conf
lrwxrwxrwx 1 root root   29 21 mars  19:24 status.load -> ../mods-available/status.load

Les plus avertis d'entre vous auront remarqué que tous ces fichiers ne sont que des liens vers d'autres fichiers qui sont situés dans ../mods-available/.

En fait, le répertoire mods-enabled ne contient que des liens. Ces liens pointent vers les vrais fichiers qui sont contenus dans mods-available.

Nous venons de découvrir le fonctionnement modulaire d'Apache2.

  • Tous les modules sont installés dans mods-available.

  • On crée des liens vers ces fichiers dans mods-enabled.

  • Seul le répertoire mods-enabled est lu par la configuration d'Apache.

Ce mode de fonctionnement nous permettra très facilement de désactiver ou d'activer un module pour Apache2. Il suffira de créer un lien vers le module ou au contraire de l'effacer.

Donc, pour installer un module, vous avez deux choix :

  • l'installer avec la commande apt-get install nom_module ;

  • récupérer les fichiers .conf et .load et les mettre dans le répertoire mods-available, puis créer des liens vers ces fichiers dans mods-enabled.

Vous savez donc maintenant installer, désactiver ou activer un module.

Nous allons passer à la suite des includes de notre fichier apache2.conf.
Include httpd.conf
Là, il s'agit simplement de conserver ce qui pouvait exister historiquement, mais ce fichier est vide par défaut.

Include ports.conf
Ce fichier va indiquer sur quel port notre serveur doit écouter. Par défaut, il s'agit du port 80, mais cela peut être modifié si vous le souhaitez (mais vous ne voudriez pas outrepasser une norme, n'est-ce pas ?)

Il y a ensuite quelques informations sur le format des logs du service et le répertoire conf.d qui peut comprendre des attributs de configuration particuliers, mais cela ne nous intéresse pas ici.

Et enfin une dernière partie très importante qui concerne les virtualhosts :

# Include the virtual host configurations:
Include sites-enabled/

Le virtualhost est une notion très importante dans Apache2. C'est ce qui nous permet de faire tourner plusieurs sites sur le même serveur Apache2.
Vous pouvez avoir un serveur web qui présente plusieurs sites web, comme www.lalitte.com et www.mailforkids.net qui sont deux sites différents, mais hébergés sur le même serveur Apache2.

Nous allons donc regarder ce qui est contenu dans le répertoire sites-enabled.

# ls -la sites-enabled/
total 2
drwxr-xr-x 2 root root 4096  4 sept.  2012 .
drwxr-xr-x 7 root root 4096 22 mars  15:50 ..
lrwxrwxrwx 1 root root   26 16 mars   2011 000-default -> ../sites-available/default

Un seul fichier ici ! Enfin, un lien plus exactement, mais nous connaissons le principe maintenant, qui est le même que pour les modules avec un répertoire sites-available qui contient les fichiers et le répertoire sites-enabled qui contient les liens vers les fichiers dans sites-available.
Ce fichier est le fichier de configuration par défaut de nos virtualhosts. C'est lui qui sera utilisé par défaut pour toute requête web arrivant à notre serveur.
Regardons son contenu :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        
        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride all 
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all 
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

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

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Nous n'avons besoin de comprendre que quelques éléments pour l'instant.
<VirtualHost *:80>
Ceci indique le début d'une directive de configuration Apache et notamment le début d'un virtualhost qui sera en écoute sur le port 80.

DocumentRoot /var/www/
Le DocumentRoot est très important. C'est ce qui va indiquer au serveur Apache2 où vont se situer les pages de notre site web. Dans notre cas, comme dans la majorité des cas, la racine de notre site web se situera dans /var/www/.
D'ailleurs, nous pouvons aller voir le contenu de ce répertoire :

# ls -la /var/www/
total 2
drwxr-xr-x  6 root root     4096 15 oct.  18:47 .
drwxr-xr-x 14 root root     4096 16 mars   2011 ..
-rw-r--r--  1 root root      517 16 mars   2011 index.html

Il ne contient qu'un fichier index.html. Allons voir son contenu :

# cat /var/www/index.html
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body>
</html>

Cela correspond bien à ce que nous avons vu tout à l'heure sur la page web !
Nous pouvons essayer de faire une modification et de voir le résultat.
Éditez le fichier index.html et mettez-y... ce que vous voulez !

Moi j'ai opté pour la page suivante:

<html><body><h1>Ma belle page de la mort qui tue !</h1>
<p>Bienvenue sur mon serveur apache2 qu'il est bien.</p>
<p>Le réseau c'est génial !</p>
</body>
</html>

Ceci me donne :

Ma nouvelle page web
Ma nouvelle page web

Bon OK, ce n'est pas encore génial, et il y a apparemment de gros problèmes d'encodage des accents.
Mais, au moins, notre page s'affiche. :)

Nous allons maintenant pouvoir passer à quelques éléments de configuration avancée.

Pour aller plus loin

Nous allons voir ici quelques éléments de configuration du serveur Apache2 qui pourraient vous intéresser.

Dans un premier temps, nous allons bidouiller un peu, et voir les conséquences de nos bidouilles.

Bidouillons gaiement !

Comme premier test, nous avons modifié le contenu de notre fichier index.html.
Nous allons maintenant essayer de changer son nom pour voir les conséquences.

index.tutu

Nous allons l'appeler index.tutu :

# cd /var/www
# mv index.html index.tutu

Observons le résultat quand on se connecte simplement sur le site :

Page par défaut avec index.tutu
Page par défaut avec index.tutu

Nous voyons que ce n'est plus notre page web qui nous est présentée, mais le contenu du répertoire /var/www/.
Si nous cliquons maintenant sur index.tutu, que se passe-t-il ?

Affichage d'index.tutu
Affichage d'index.tutu

Ce n'est plus notre belle page web, mais simplement son contenu avec les balises...

Mais que se passe-t-il ? Notre serveur ne fonctionne plus ? :o

Ajouter des fichiers d'index à Apache2

Si, il continue de très bien fonctionner, mais il fait ce qu'on lui dit de faire.
Dans un premier temps, nous sommes allés vers la page principale du site sans préciser de nom de page spécifique. Dans ce cas, Apache regarde s'il y a un fichier par défaut qui doit s'appeler index et une extension d'un langage web.
Cette directive, très importante, se trouve dans le module dir.

# cat /etc/apache2/mods-available/dir.conf
<IfModule mod_dir.c>
          DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

La directive DirectoryIndex indique à Apache quel peut être le nom du fichier qui sera automatiquement lu par le serveur si aucun fichier n'est indiqué.

Nous pouvons essayer d'ajouter notre fichier index.tutu au DirectoryIndex.

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm index.tutu

Regardons le résultat, en ne rentrant dans l'URL QUE l'adresse IP du site 192.168.0.1 :

Avec DirectoryIndex index.tutu
Avec DirectoryIndex index.tutu

Eh bien ? Ça n'a rien changé… :waw:
Oui, car nous avons changé la configuration d'Apache2, mais nous ne lui avons pas dit. En fait, il faut relancer le service apache2 pour que les nouveautés de configuration soient prises en compte :

# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

Et nous pouvons maintenant rafraîchir la page :

Affichage d'index.tutu sans l'avoir précisé
Affichage d'index.tutu sans l'avoir précisé

On voit effectivement qu'Apache2 ne nous affiche plus le contenu du répertoire /var/www/, mais directement le fichier index.tutu qui est bien spécifié dans le DirectoryIndex.

Cependant, c'est toujours le texte avec les balises qui est affiché, et non la page web interprétée. :(

Ajouter des types à Apache2

Pour cela, nous devons dire à Apache2 que les fichiers d'extension .tutu doivent être interprétés comme des fichiers html. Cela se fait grâce à la directive AddType qui se trouve dans le module mime.
On ajoute à la fin du fichier :
AddType text/html .tutu

On relance Apache2 et on actualise notre page, en appuyant sur la touche F5 par exemple :

Ma nouvelle page web
Ma nouvelle page web

Cette fois tout est bon !
Enfin… pas le problème d'encodage des accents, mais ce n'est pas l'objet du cours. :o

Nous avons vu quelques directives intéressantes d'Apache2, nous allons maintenant voir comment faire tourner plusieurs sites différents sur notre serveur.

Utilisation des virtualhosts

Nous allons essayer de présenter deux sites différents sur notre serveur.

Mais comment Apache saura différencier ces deux sites et saura lequel présenter lors d'une requête sur le port 80 ?

En fait, il y a plusieurs façons de faire des virtualhosts, mais nous allons nous baser sur la plus répandue en utilisant des noms de domaine différents pour nos sites.

Nous allons créer les sites toto.com et tutu.com.
Ainsi, quand une requête arrivera, Apache2 pourra savoir si la demande est pour toto.com ou tutu.com.

Configuration du DNS

Dans la vraie vie, vous devez acheter un domaine pour qu'il devienne accessible sur Internet.
Dans notre cas, je ne vais pas vous faire dépenser de l'argent pour un exemple. Nous allons plutôt utiliser une petite astuce qui pourra vous être utile pour beaucoup d'autres choses.

Nous allons utiliser une fonctionnalité qui permet de court-circuiter le fonctionnement normal du DNS grâce au fichier hosts.

Par exemple, si j'écris:
192.168.0.1   www.google.fr

La prochaine fois que j'essaierai d'aller vers www.google.fr, ma machine pensera que le serveur de Google se trouve à l'adresse 192.168.0.1 et enverra la requête à cette adresse.

Nous allons donc modifier notre fichier hosts pour y ajouter des associations pour www.toto.com et www.tutu.com.

  • Sous Unix, le fichier hosts se trouve dans /etc.

  • Sous Windows, il se trouve dans C:\Windows\System32\drivers\etc\.

Donc sur notre Debian, nous allons éditer le fichier hosts et ajouter deux lignes en haut du fichier :
192.168.0.1   www.toto.com
192.168.0.1   www.tutu.com
Désormais, dès lors que notre machine voudra accéder à un de ces deux sites, elle accédera à... elle-même. ;)

Nous pouvons tester en entrant www.toto.com dans l'URL de notre navigateur :

Site www.toto.com
Site www.toto.com

Ça marche !
Et ça marche de même avec www.tutu.com :

Site www.tutu.com
Site www.tutu.com

Par contre, pour l'instant, le serveur Apache nous présente deux fois la même page.

Nous allons donc nous attaquer aux virtualhosts.

Configuration des virtualhosts.

Comme on l'a vu précédemment, les virtualhosts se configurent dans sites-available/.
Nous allons donc créer deux nouveaux fichiers pour nos deux virtualhosts. Pour cela, nous allons simplement copier le fichier default, et modifier le contenu des fichiers copiés.

# cd /etc/apache2/sites-available/
# cp default www.toto.com
# cp default www.tutu.com

Ensuite, nous allons simplement modifier trois choses et ajouter :

  • une directive ServerName pour indiquer le nom de notre virtualhost ;

  • le DocumentRoot qui précise où se situent nos pages ;

  • et enfin la balise Directory pour y indiquer notre nouveau chemin.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.toto.com
        
        DocumentRoot /var/www/toto.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride all 
        </Directory>
        <Directory /var/www/toto.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all 
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

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

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Nous faisons de même pour tutu.com.

Il nous reste encore à activer ces virtualhosts dans sites-enabled/.

# cd /etc/apache2/sites-enabled/
# ln -s ../sites-available/www.toto.com .
# ln -s ../sites-available/www.tutu.com .

Nos virtualhosts sont prêts, il ne nous reste plus qu'à créer les répertoires et pages de nos sites :

# mkdir /var/www/toto.com/
# touch /var/www/toto.com/index.html
# echo "<html><body><h1>Bienvenus sur toto.com !</h1></body></html>" > /var/www/toto.com/index.html
# mkdir /var/www/tutu.com/
# touch /var/www/tutu.com/index.html
# echo "<html><body><h1>Bienvenus sur tutu.com !</h1></body></html>" > /var/www/tutu.com/index.html

Nos virtualhosts devraient maintenant être effectifs :

Vrai site www.toto.com
Vrai site www.toto.com
Vrai site www.tutu.com
Vrai site www.tutu.com

Nous avons donc réussi à présenter deux sites différents sur un seul et même serveur Apache2.

Nous allons maintenant voir deux cas différents de configuration qui permettent de placer les pages de vos sites en dehors de /var/www/.

Un répertoire venu d'ailleurs

Imaginons que vous avez mis en place votre propre serveur web et que vous avez réalisé une page web présentant votre famille sur le nom de domaine que vous avez acheté www.mafamille.com.
Votre petite sœur vient vous voir et aimerait bien mettre en place un site pour elle pour présenter ses hobbies.
Maintenant que vous savez faire des virtualhosts, vous pourriez tout à fait créer le nom de domaine petitesoeur.mafamille.com et faire un virtualhost pour ce site.
Cependant, vous trouvez plus intéressant de faire un site du type www.mafamille.com/masoeur.
Ainsi, vous pourriez faire pareil pour tous les membres de la famille.

Cependant, si vous faites comme cela, vous devrez donner accès au répertoire /var/www/ à votre sœur, ce qui ne vous emballe pas trop si elle y fait des bêtises.

Il existe une solution simple. Vous pouvez tout à fait laisser un accès complet à un répertoire pour votre sœur, et faire un raccourci de ce répertoire dans /var/www/.

Un lien plus que familial

Essayez par exemple de créer une page web dans /home/user/ :

# touch /home/user/index.html
# echo "<html><body><h1>La jolie page de ma sœur !</h1></body></html>" > /home/user/index.html

Vous pouvez alors créer un lien de ce répertoire dans /var/www :

# cd /var/www/
# ln -s /home/user/ masoeur
# ls -la
total 2
drwxr-xr-x  6 root root     4096 15 oct.  18:47 .
drwxr-xr-x 14 root root     4096 16 mars   2011 ..
-rw-r--r--  1 root root      117 25 sept. 17:16 index.tutu
lrwxrwxrwx  1 root root       28 11 avril  2012 masoeur -> /home/user/
drwxr-xr-x  1 root root     4096 25 sept. 17:16 toto.com
drwxr-xr-x  1 root root     4096 25 sept. 17:16 tutu.com

Désormais, si vous allez sur le site www.mafamille.com/masoeur/ vous allez tomber sur la page de votre petite sœur !
Et ceci, sans qu'elle mette à mal toutes les pages que vous avez mis du temps à créer.

Exercice

Essayez de mettre en œuvre ce qu'il faut pour pouvoir taper www.mafamille.com/masoeur/ et que cela fonctionne aussi.

Essayez aussi de faire en sorte que l'on tombe sur le site de votre petite sœur en tapant masoeur.mafamille.com/.

Vous savez maintenant mettre en place des virtualhosts et potentiellement laisser un accès à différentes personnes pour gérer leur site. Nous allons maintenant voir comment faire en sorte de rendre accessible une page pour l'ensemble de vos virtualhosts.

Une page pour tous !

Votre site a prospéré et vous hébergez maintenant une bonne dizaine de virtualhosts, pour votre voisin, votre école, votre club de bridge, etc.
Vous avez même créé une page qui donne des statistiques sur l'utilisation générale de votre serveur Apache2 : le nombre de pages lues, le nombre de sites, etc.
Vous aimeriez maintenant que cette page puisse être accessible sur chacun des différents virtualhosts que vous possédez.

Une façon de faire serait de dupliquer la page sur chacun des virtualhosts, mais ce serait lourd et devrait être répété à chaque nouveau site créé. Il y a cependant une solution simple, grâce aux alias.

Par exemple, je peux dire que si j'indique dans mon URL messtats/, qui n'est pas un répertoire dans /var/www/, le navigateur sera redirigé vers le répertoire /home/messtats/.
Ainsi, www.toto.com/messtats/ ou www.tutu.com/messtats/ pointeront vers la même page.

Les alias peuvent se configurer grâce au module alias.

Nous allons tester cela en modifiant le fichier /etc/apache2/mods-available/alias.conf pour ajouter une ligneAlias /test/ /home/user/:

<IfModule alias_module>
#
# Aliases: Add here as many aliases as you need (with no limit). The format is 
# Alias fakename realname
#
# Note that if you include a trailing / on fakename then the server will
# require it to be present in the URL.  So "/icons" isn't aliased in this
# example, only "/icons/".  If the fakename is slash-terminated, then the 
# realname must also be slash terminated, and if the fakename omits the 
# trailing slash, the realname must also omit it.
#
# We include the /icons/ alias for FancyIndexed directory listings.  If
# you do not use FancyIndexing, you may comment this out.
#
Alias /icons/ "/usr/share/apache2/icons/"
Alias /test/ /home/user/

<Directory "/usr/share/apache2/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

</IfModule>

Relancez Apache2 et mettez-vous sur l'URL www.toto.com/test/.

Si tout se passe bien, vous allez vous retrouver sur la page de votre petite sœur ! :D
Et de même pour www.tutu.com/test/ ou 192.168.01/test/.

Nous avons pu ainsi créer une page, ou un répertoire, accessible depuis n'importe lequel de nos virtualhosts.

Nous en avons fini avec la configuration d'Apache2. Il y a encore beaucoup de choses à découvrir sur sa configuration, mais un livre entier pourrait y être consacré !

  • Vous savez maintenant installer et configurer un serveur DHCP.

  • Vous pouvez mettre en place un serveur DNS avec Bind.

  • Vous savez installer et configurer un serveur web avec Apache2.

‌Ça y est, vous possédez, chez vous, un embryon d'infrastructure réseau avec quelques services fort intéressants et indispensables au fonctionnement d'Internet.

Vous savez désormais:

  • installer et configurer un serveur DHCP,

  • installer et configurer un serveur DNS avec Bind,

  • installer et configurer un serveur web avec apache2.

Si vous le désirez, vous pouvez tenter l'aventure d'acheter votre propre nom de domaine et d'installer et configurer vos propres serveurs DNS et web pour héberger votre site chez vous !

Si jamais cela vous tente, n'hésitez pas à passer sur le forum du site du zéro pour poser des questions. Toute la communauté se fera un plaisir de vous aider à réussir ce challenge :D

Ce cours s'achève, et vous pouvez être fiers de vous. Vous avez parcouru beaucoup de chemin et maîtrisez maintenant toutes les bases des réseaux TCP/IP.

Maintenant:

  • Vous comprenez comment une information circule sur le réseau d'un ordinateur à un autre,

  • Vous savez mettre en place un réseau et les matériels associés,

  • Vous savez configurer son adressage pour que chacune des machines soit connectée,

  • Vous savez mettre en place des services pour permettre le bon fonctionnement des réseaux,

  • Bref, vous avez une meilleure compréhension du fonctionnement d'Internet et êtes prêts à y participer activement :D

Ne sous-estimez pas vos connaissances, si vous avez parcouru sérieusement ce cours et avez bien assimilé ce que vous avez lu, vous avez réellement un niveau très correct en réseau.

Il vous reste maintenant à continuer à explorer le monde merveilleux d'Internet et des possibilités qu'offrent le réseau. Comme le futur IPv6, la supervision des machines et des services, la supervision des flux de données, le fonctionnement et la mise en place d'un serveur de messagerie, explorer la sécurité réseau et système, etc.
Autant de plaisirs qui vous attendent... sûrement dans un futur tutoriel qui fera de vous un administrateur mondialement respecté :p

Je vous remercie et vous félicite d'être arrivés jusque là. Si ce livre vous a plu, ou pas, n'hésitez pas à me contacter et à me faire un retour, je serai ravi de vous répondre (eric@lalitte.com)

A très bientôt sur le site du zéro !

PS: Pour l'âge du capitaine, on me dit que c'est une information primordiale pour le fonctionnement des réseaux, et qui doit donc rester secrète !

Cette partie est maintenant terminée. N'oubliez pas de faire vos exercices avant de passer à la partie suivante. Vous trouverez les liens des exercices (quiz et/ou activité) dans le plan principal du cours ICI. À vous de jouer !

Exemple de certificat de réussite
Exemple de certificat de réussite