Serveur Web
| 🏠 Accueil | 📚 Index | 🐧 Linux | 🌐 Réseau | 🔒 Cybersécurité | 🖥️ Virtualisation | ✅ Checklists d'intervention | 📚 Tutoriels | 🤝 Services |
|---|
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.
Exemple
Un visiteur saisit :
https://pat-informatik.fr
Le navigateur :
- Résout le nom de domaine grâce au DNS.
- Établit une connexion avec le serveur sur le port HTTPS.
- Envoie une requête HTTP chiffrée par TLS.
- Reçoit une réponse contenant la page demandée.
- 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 :
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 :
- La résolution DNS du domaine.
- L'adresse IP publique du serveur.
- Le fonctionnement local d'Apache.
- Le pare-feu du serveur.
- La redirection des ports sur le routeur.
- Les restrictions éventuelles du fournisseur d'accès.
- 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
- Documentation officielle Apache HTTP Server
- Documentation officielle Ubuntu Server
- Certbot — obtention de certificats TLS
- Documentation Let's Encrypt
- Documentation HTTP — MDN
- Agence nationale de la sécurité des systèmes d'information (ANSSI)
- Cybermalveillance.gouv.fr
18. Pages associées du Wiki Pat-Informatik
- Ubuntu Server
- Sécurité
- Messagerie électronique
- Réseau
- Cloud Computing
- Virtualisation
- Commandes de base Linux
- Sauvegarde
- SSH
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.