Aller au contenu

Serveur Web

De Wiki Pat-Informatik
🏠 Accueil 📚 Index 🐧 Linux 🌐 Réseau 🔒 Cybersécurité 🖥️ Virtualisation ✅ Checklists d'intervention 📚 Tutoriels 🤝 Services
🌐 Serveur Web
Comprendre le fonctionnement d'un serveur Web, installer Apache sur Ubuntu Server, héberger des sites Internet et sécuriser les connexions avec HTTPS.

1. Qu'est-ce qu'un serveur Web ?

Un serveur Web est un logiciel qui reçoit des requêtes provenant de navigateurs ou d'autres clients, puis leur renvoie des ressources : pages HTML, feuilles de style CSS, images, fichiers JavaScript ou documents.

Il fonctionne sur un ordinateur, un serveur physique, une machine virtuelle ou une infrastructure hébergée dans le cloud.

Un serveur Web peut héberger :

  • Un site Internet public.
  • Un site intranet accessible uniquement sur un réseau local.
  • Une documentation technique.
  • Un wiki, par exemple Wiki Pat-Informatik.
  • Une application Web.
  • Plusieurs sites sur une même machine.

À retenir : le serveur Web est le logiciel qui répond aux requêtes HTTP ou HTTPS. La machine qui l'exécute peut également héberger une base de données, une messagerie ou d'autres services, mais ces rôles sont distincts.

2. Comment fonctionne un serveur Web ?

Lorsqu'un utilisateur ouvre une adresse dans son navigateur, celui-ci communique avec le serveur Web correspondant.

1. Navigateur Web
↓ Requête HTTP ou HTTPS
2. Serveur Web : Apache ou Nginx
↓ Traitement de la requête
3. Fichiers du site ou application Web
↓ Réponse HTTP ou HTTPS
4. Affichage de la page dans le navigateur

Exemple

Un visiteur saisit :

https://pat-informatik.fr

Le navigateur :

  1. Résout le nom de domaine grâce au DNS.
  2. Établit une connexion avec le serveur sur le port HTTPS.
  3. Envoie une requête HTTP chiffrée par TLS.
  4. Reçoit une réponse contenant la page demandée.
  5. Interprète le HTML, le CSS et le JavaScript pour afficher le site.

Si le site utilise un langage côté serveur ou une base de données, le serveur Web peut également transmettre la requête à l'application concernée.

3. Les principaux logiciels de serveur Web

Logiciel Caractéristiques
Apache HTTP Server Serveur Web polyvalent, très configurable, avec des modules et des hôtes virtuels.
Nginx Serveur Web et proxy inverse, fréquemment utilisé pour servir des fichiers statiques et répartir les requêtes.
Caddy Serveur Web proposant notamment une automatisation de la gestion des certificats HTTPS selon la configuration.
Microsoft IIS Serveur Web intégré à l'écosystème Windows Server.

Dans ce guide, nous utiliserons Apache HTTP Server sur Ubuntu Server.

4. Les protocoles HTTP et HTTPS

HTTP

HTTP signifie Hypertext Transfer Protocol. Il permet au navigateur et au serveur d'échanger des requêtes et des réponses Web.

Le port TCP habituellement utilisé est le 80.

HTTPS

HTTPS correspond à HTTP transporté dans une connexion protégée par TLS.

Il permet notamment :

  • De chiffrer les échanges entre le navigateur et le serveur.
  • De vérifier l'identité du serveur à l'aide de son certificat.
  • De protéger l'intégrité des données pendant le transport.

Le port TCP habituellement utilisé est le 443.

Protocole Port courant Utilisation
HTTP 80 Accès Web sans chiffrement TLS.
HTTPS 443 Accès Web protégé par TLS.

Bonne pratique : pour un site accessible depuis Internet, configure HTTPS avec un certificat valide et redirige généralement les requêtes HTTP vers HTTPS.

5. Installer Apache sur Ubuntu Server

Les commandes suivantes sont destinées à une installation Ubuntu Server. Elles supposent que tu disposes d'un compte autorisé à utiliser sudo.

Étape 1 : mettre à jour les paquets

sudo apt update
sudo apt upgrade

La première commande actualise la liste des paquets disponibles. La seconde installe les mises à jour proposées.

Étape 2 : installer Apache

sudo apt install apache2

Étape 3 : démarrer et activer Apache

sudo systemctl enable --now apache2

Étape 4 : vérifier le service

sudo systemctl status apache2

Le service doit normalement apparaître comme actif, avec l'état active (running).

Étape 5 : tester le serveur

Depuis le serveur :

curl -I http://localhost

Cette commande affiche les en-têtes HTTP de la réponse. Tu peux également ouvrir l'adresse IP du serveur dans un navigateur connecté au même réseau, si le pare-feu l'autorise.

6. Comprendre l'arborescence Apache

Sur Ubuntu, les fichiers principaux d'Apache sont généralement organisés ainsi :

Chemin Fonction
/etc/apache2/ Répertoire principal de configuration.
/etc/apache2/apache2.conf Configuration générale.
/etc/apache2/sites-available/ Définitions des sites disponibles.
/etc/apache2/sites-enabled/ Sites activés, généralement sous forme de liens symboliques.
/etc/apache2/mods-available/ Modules disponibles.
/etc/apache2/mods-enabled/ Modules activés.
/var/www/html/ Répertoire Web utilisé par la configuration par défaut habituelle.
/var/log/apache2/ Journaux d'accès et d'erreurs.

7. Créer une page Web de test

Nous allons créer une page HTML simple.

Étape 1 : créer un fichier

sudo nano /var/www/html/index.html

Ajoute le contenu suivant :

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Mon serveur Web</title>
</head>
<body>
    <h1>Bienvenue sur mon serveur Web !</h1>
    <p>Serveur hébergé avec Apache sur Ubuntu Server.</p>
</body>
</html>

Enregistre le fichier, puis quitte l'éditeur.

Étape 2 : tester la page

Ouvre dans un navigateur :

http://ADRESSE_IP_DU_SERVEUR/

Remplace ADRESSE_IP_DU_SERVEUR par l'adresse réelle de ton serveur.

Si le site affiche la page créée, Apache sert correctement le fichier HTML.

8. Héberger plusieurs sites avec les Virtual Hosts

Apache permet d'héberger plusieurs sites sur une seule machine grâce aux Virtual Hosts ou hôtes virtuels.

Le serveur identifie le site demandé à partir des informations de la requête, notamment le nom d'hôte.

Exemple d'organisation

/var/www/
├── pat-informatik.fr/
│   └── public/
│       └── index.html
├── wiki.pat-informatik.fr/
│   └── public/
│       └── index.html
└── boutique.example/
    └── public/
        └── index.html

Les noms sont des exemples : crée uniquement les répertoires correspondant aux sites que tu souhaites réellement héberger.

Étape 1 : créer le répertoire du site

sudo mkdir -p /var/www/pat-informatik.fr/public

Créer une page de test :

sudo nano /var/www/pat-informatik.fr/public/index.html

Étape 2 : créer le Virtual Host

sudo nano /etc/apache2/sites-available/pat-informatik.fr.conf

Exemple de configuration HTTP :

<VirtualHost *:80>
    ServerName pat-informatik.fr
    ServerAlias www.pat-informatik.fr

    DocumentRoot /var/www/pat-informatik.fr/public

    <Directory /var/www/pat-informatik.fr/public>
        Options -Indexes
        AllowOverride None
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/pat-informatik-error.log
    CustomLog ${APACHE_LOG_DIR}/pat-informatik-access.log combined
</VirtualHost>

Explications :

  • ServerName : nom principal du site.
  • ServerAlias : autres noms associés au site.
  • DocumentRoot : emplacement des fichiers Web.
  • Options -Indexes : évite l'affichage automatique du contenu d'un répertoire sans fichier d'index.
  • Require all granted : autorise l'accès aux ressources de ce répertoire selon cette règle Apache.
  • ErrorLog : journal des erreurs.
  • CustomLog : journal des requêtes.

Étape 3 : activer le site

sudo a2ensite pat-informatik.fr.conf

Étape 4 : vérifier la configuration

sudo apache2ctl configtest

Le résultat attendu est :

Syntax OK

Étape 5 : recharger Apache

Après une vérification réussie :

sudo systemctl reload apache2

Le nom de domaine doit également pointer vers le serveur et le port 80 doit être accessible pour que le site soit joignable depuis le réseau concerné.

9. Activer HTTPS avec un certificat TLS

Pour un site accessible sur Internet, un certificat TLS valide est indispensable à une configuration HTTPS fiable.

Let's Encrypt est une autorité de certification qui délivre gratuitement des certificats automatisés.

Sur Ubuntu, Certbot peut automatiser l'obtention et le renouvellement des certificats pour Apache.

Préconditions

Avant de demander un certificat, vérifie :

  • Que le nom de domaine pointe vers le bon serveur.
  • Que les ports nécessaires à la validation sont accessibles.
  • Que le site et la configuration Apache fonctionnent.
  • Que les noms demandés dans le certificat sont corrects.

Installer Certbot

Sur une installation Ubuntu compatible utilisant les paquets APT :

sudo apt update
sudo apt install certbot python3-certbot-apache

Demander un certificat

Exemple pour un domaine et son alias :

sudo certbot --apache -d pat-informatik.fr -d www.pat-informatik.fr

N'utilise cette commande que si ces noms existent, pointent vers le serveur et doivent réellement être couverts par le certificat.

Suis les instructions de Certbot. Selon les choix proposés et la configuration, l'outil peut installer le certificat et adapter Apache.

Vérifier le renouvellement

sudo certbot renew --dry-run

Cette commande teste le mécanisme de renouvellement sans attendre l'expiration du certificat.

Important : un certificat valide ne remplace pas les mises à jour du serveur, une configuration TLS correcte, les sauvegardes et la sécurisation de l'application Web.

10. Les permissions des fichiers Web

Les fichiers du site doivent être lisibles par Apache, sans accorder inutilement des droits d'écriture.

Exemple d'inspection :

ls -la /var/www/pat-informatik.fr/public

Pour un site HTML statique, une base courante consiste à donner la propriété des fichiers à un compte de déploiement et à autoriser leur lecture par le serveur Web.

Exemple, à adapter au propriétaire et au groupe réellement utilisés :

sudo chown -R root:root /var/www/pat-informatik.fr/public
sudo find /var/www/pat-informatik.fr/public -type d -exec chmod 755 {} \;
sudo find /var/www/pat-informatik.fr/public -type f -exec chmod 644 {} \;

Ces commandes conviennent à un exemple simple de site statique dont les fichiers sont administrés par root. Elles ne conviennent pas nécessairement aux applications qui doivent écrire dans certains répertoires.

Attention : ne donne pas des droits d'écriture à tous les utilisateurs sur l'ensemble de /var/www. Pour un CMS ou une application, identifie précisément les répertoires qui doivent être modifiables et limite les permissions au strict nécessaire.

11. Les journaux Apache

Les journaux permettent de comprendre le fonctionnement du serveur et de diagnostiquer les erreurs.

Journal des accès

sudo tail -f /var/log/apache2/access.log

Il contient les requêtes reçues, les chemins demandés, les codes de réponse et d'autres informations selon le format configuré.

Journal des erreurs

sudo tail -f /var/log/apache2/error.log

Il peut révéler des erreurs de configuration, des problèmes d'accès aux fichiers ou des difficultés rencontrées par certains modules.

Quelques codes HTTP courants

Code Signification
200 Requête traitée avec succès.
301 Redirection permanente.
302 Redirection temporaire.
400 Requête incorrecte.
401 Authentification nécessaire ou refusée selon le contexte.
403 Accès interdit.
404 Ressource introuvable.
500 Erreur interne du serveur.
502 Réponse incorrecte reçue d'un serveur intermédiaire ou en amont.
503 Service temporairement indisponible.

12. Sécuriser un serveur Web

Un serveur exposé à Internet doit être entretenu et protégé.

Mesures essentielles

  • Installer régulièrement les mises à jour de sécurité.
  • Utiliser HTTPS avec un certificat valide.
  • Limiter les ports ouverts au strict nécessaire.
  • Désactiver les modules Apache inutilisés.
  • Éviter l'affichage du contenu des répertoires.
  • Appliquer des permissions adaptées aux fichiers.
  • Protéger les interfaces d'administration.
  • Utiliser des mots de passe robustes et, lorsque possible, une authentification multifacteur.
  • Sauvegarder les sites, les bases de données et les configurations.
  • Surveiller les journaux et les erreurs répétées.
  • Sécuriser les applications, extensions et systèmes de gestion de contenu.
  • Ne pas stocker de secrets ou de mots de passe en clair dans les fichiers publics.

Vérifier les ports en écoute

sudo ss -lntp

Cette commande liste les ports TCP en écoute. Vérifie que seuls les services nécessaires sont exposés.

Pare-feu UFW

Si UFW est utilisé, vérifie d'abord les règles existantes :

sudo ufw status verbose

Pour autoriser le profil Apache fourni par Ubuntu :

sudo ufw allow 'Apache Full'

Ce profil autorise normalement HTTP et HTTPS. Avant d'activer le pare-feu, vérifie que l'accès SSH est autorisé si tu administres le serveur à distance, afin d'éviter de perdre la connexion.

Mises à jour

sudo apt update
sudo apt upgrade

La fréquence de maintenance doit être adaptée à l'exposition du serveur et à l'importance des services hébergés.

13. Le proxy inverse

Un proxy inverse reçoit les requêtes des clients puis les transmet à une autre application ou à un autre serveur.

Exemple d'architecture :

Navigateur Web
↓
Apache — proxy inverse
↓
Application Web sur un port interne

Cette architecture peut être utilisée pour publier une application Web sans exposer directement son port interne sur Internet.

Elle nécessite une configuration adaptée des en-têtes transmis, des règles d'accès, du chiffrement et de l'application en amont.

14. Dépannage : le site ne fonctionne pas

Apache ne démarre pas

Vérifie l'état du service :

sudo systemctl status apache2

Vérifie la syntaxe de la configuration :

sudo apache2ctl configtest

Consulte les erreurs récentes :

sudo journalctl -u apache2 -n 100 --no-pager

Le navigateur affiche une erreur 403

Causes possibles :

  • Permissions insuffisantes sur un fichier ou un répertoire.
  • Règles Apache interdisant l'accès.
  • Fichier d'index absent avec l'affichage des répertoires désactivé.
  • Restrictions de sécurité du système.

Consulte le journal des erreurs pour identifier la cause réelle.

Le navigateur affiche une erreur 404

Vérifie :

  • L'URL saisie.
  • L'existence du fichier demandé.
  • Le bon DocumentRoot.
  • Le Virtual Host sélectionné.
  • Les règles de réécriture éventuelles.

Le site est inaccessible depuis Internet

Vérifie successivement :

  1. La résolution DNS du domaine.
  2. L'adresse IP publique du serveur.
  3. Le fonctionnement local d'Apache.
  4. Le pare-feu du serveur.
  5. La redirection des ports sur le routeur.
  6. Les restrictions éventuelles du fournisseur d'accès.
  7. La validité du certificat et la configuration HTTPS.

Afficher les Virtual Hosts chargés

sudo apache2ctl -S

Cette commande aide à identifier les sites configurés, les ports concernés et le Virtual Host par défaut.

15. Sauvegarder un serveur Web

Une sauvegarde utile doit prendre en compte :

  • Les fichiers du site, notamment ceux de /var/www.
  • La configuration Apache dans /etc/apache2.
  • Les fichiers de configuration de l'application.
  • Les bases de données, si le site en utilise.
  • Les certificats et les informations nécessaires à leur renouvellement.
  • Les procédures de restauration.

Pour un CMS ou une application dynamique, une simple copie des fichiers peut être insuffisante : il faut également sauvegarder la base de données et les données stockées en dehors du répertoire Web.

Voir aussi : Sauvegarde.

16. Glossaire

Terme Définition
Apache Logiciel serveur HTTP open source.
HTTP Protocole de communication du Web.
HTTPS HTTP protégé par TLS.
TLS Protocole de sécurisation des communications.
DNS Système qui associe notamment les noms de domaine à des adresses IP.
Virtual Host Configuration permettant d'héberger plusieurs sites sur un serveur.
DocumentRoot Répertoire principal des fichiers servis par un hôte virtuel.
Proxy inverse Serveur intermédiaire qui transmet les requêtes à une application ou un serveur en amont.
Certificat TLS Élément utilisé pour authentifier un serveur et établir une connexion sécurisée.
Code HTTP Code indiquant le résultat du traitement d'une requête.

17. Ressources et documentation

18. Pages associées du Wiki Pat-Informatik

Pat Informatik — À retenir

Un serveur Web permet de publier des sites et des applications. Pour fonctionner correctement, il doit disposer d'une configuration cohérente, de noms DNS adaptés, de permissions maîtrisées, d'un accès réseau contrôlé, de HTTPS et de sauvegardes régulièrement testées.