Imaginez un serveur web comme un serveur dans un restaurant : il reçoit les commandes des clients (les requêtes HTTP), va chercher ce qu’il faut en cuisine (vos fichiers ou votre application), et apporte le plat (la réponse). Sans serveur web, votre site existe sur votre disque dur mais personne ne peut y accéder depuis Internet.
Ce guide vous aide à choisir le bon serveur web (Nginx, Apache ou Caddy) et à configurer les cas d’usage courants : héberger un site, sécuriser avec HTTPS, ou exposer une application.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »Niveau : Débutant → Intermédiaire · Durée : 20 min de lecture
À la fin de cette page, vous saurez :
- Choisir entre Nginx, Apache et Caddy selon votre situation
- Comprendre les 6 concepts que tout administrateur doit connaître
- Appliquer une checklist avant de mettre en production
- Dépanner les erreurs les plus fréquentes (403, 502…)
Choisissez votre objectif
Section intitulée « Choisissez votre objectif »Choisir son serveur en 20 secondes
Section intitulée « Choisir son serveur en 20 secondes »Pourquoi 3 serveurs différents ? Chacun a été créé pour résoudre un problème spécifique. Apache (1995) a démocratisé le web. Nginx (2004) a été conçu pour gérer des milliers de connexions simultanées. Caddy (2015) a simplifié HTTPS. Votre choix dépend de vos contraintes : performance, simplicité, compatibilité.
| Besoin principal | Serveur recommandé | Pourquoi |
|---|---|---|
| Reverse proxy + perfs | Nginx | Architecture événementielle, faible RAM, cache intégré |
| HTTPS automatique | Caddy | Certificats Let’s Encrypt sans config, HTTP/3 natif |
| Compatibilité legacy / .htaccess | Apache | Écosystème historique, modules dynamiques, PHP mod_php |
| Maximum de perfs | Nginx ou OpenLiteSpeed | Optimisés pour le trafic intense |
| Simplicité avant tout | Caddy | Config en 5 lignes, zéro complexité TLS |
Tableau comparatif détaillé
Section intitulée « Tableau comparatif détaillé »| Critère | Nginx | Apache | Caddy |
|---|---|---|---|
| Architecture | Événementielle async | Processus/threads (MPM) | Événementielle Go |
| HTTPS | Manuel (Certbot) | Manuel (Certbot) | Automatique |
| Config | Fichiers .conf | Fichiers .conf + .htaccess | Caddyfile simple |
| HTTP/2 | Oui | Oui | Oui |
| HTTP/3 (QUIC) | Expérimental | Non | Natif |
| Reverse proxy | Excellent | Bon | Très bon |
| Cache | Intégré | Modules | Basique |
| RAM | Très faible | Modérée à élevée | Faible |
| Courbe d’apprentissage | Moyenne | Moyenne | Facile |
| Cas idéal | Prod haute charge | Legacy PHP, CMS | Petits/moyens déploiements |
Les 6 concepts à maîtriser
Section intitulée « Les 6 concepts à maîtriser »Quel que soit le serveur choisi (Nginx, Apache, Caddy), ces 6 concepts sont universels. Une fois compris, vous pourrez configurer n’importe quel serveur web.
1. Requête/Réponse HTTP — Le dialogue client-serveur
Section intitulée « 1. Requête/Réponse HTTP — Le dialogue client-serveur »Analogie : Comme un échange client-serveur en réseau : vous envoyez un paquet SYN (requête), le serveur répond SYN-ACK (réponse) puis envoie les données demandées.
Le navigateur envoie une requête (« je veux la page /contact »), le serveur renvoie une réponse (« voici le contenu » ou « page introuvable »).
| Code réponse | Signification | Exemple concret |
|---|---|---|
| 200 | OK, voici le contenu | Page affichée normalement |
| 301/302 | Redirection | L’URL a changé, suivez ce lien |
| 403 | Interdit | Vous n’avez pas le droit d’accéder |
| 404 | Introuvable | Le fichier n’existe pas |
| 500 | Erreur serveur | Bug dans le code ou la config |
| 502 | Mauvaise passerelle | Le backend ne répond pas |
Voir un exemple de requête/réponse HTTP
Ce que votre navigateur envoie (requête) :
GET /index.html HTTP/1.1Host: www.example.comUser-Agent: Mozilla/5.0GET= je veux lire (pas modifier)/index.html= le fichier demandéHost:= quel site (important pour les virtual hosts)
Ce que le serveur répond :
HTTP/1.1 200 OKContent-Type: text/html
<!DOCTYPE html><html><body><h1>Hello!</h1></body></html>2. Virtual Hosts — Plusieurs sites sur un serveur
Section intitulée « 2. Virtual Hosts — Plusieurs sites sur un serveur »Analogie : Comme plusieurs enregistrements DNS pointant vers la même IP. Même adresse réseau, mais le serveur web route selon le header Host: (équivalent du CNAME).
Pourquoi c’est utile ? Un serveur coûte de l’argent. Héberger 10 sites sur 1 serveur au lieu de 10 serveurs = économies.
# Nginx : 2 sites sur 1 serveur, même IPserver { server_name blog.exemple.fr; root /var/www/blog;}server { server_name shop.exemple.fr; root /var/www/shop;}Quand un visiteur demande blog.exemple.fr, Nginx regarde le header Host: et sert /var/www/blog. Pour shop.exemple.fr, il sert /var/www/shop.
3. Reverse Proxy — Le serveur web comme intermédiaire
Section intitulée « 3. Reverse Proxy — Le serveur web comme intermédiaire »Analogie : Un API Gateway. Vous envoyez une requête sur le port public (80), le gateway (Nginx) route vers le bon microservice backend (votre app Node.js sur le port 3000).
Pourquoi c’est utile ?
- Votre app Node.js/Python/Go tourne sur le port 3000, mais les utilisateurs attendent le port 80/443
- Le serveur web gère HTTPS, les logs, la compression
- Vous pouvez avoir plusieurs apps derrière le même domaine
# Toutes les requêtes vers / sont transmises à l'app Node.jslocation / { proxy_pass http://127.0.0.1:3000; # App sur port 3000 proxy_set_header Host $host; # Transmet le domaine}Sans reverse proxy : http://monsite.com:3000 (moche, port à retenir)
Avec reverse proxy : https://monsite.com (propre, HTTPS géré par Nginx)
4. HTTPS / TLS — Chiffrer les communications
Section intitulée « 4. HTTPS / TLS — Chiffrer les communications »Analogie : Comme un tunnel réseau non chiffré (HTTP) vs un tunnel VPN/TLS (HTTPS). Sans chiffrement, n’importe quel switch/routeur intermédiaire peut sniffer vos mots de passe.
Pourquoi c’est obligatoire en 2026 ?
- Google pénalise les sites HTTP dans les résultats de recherche
- Les navigateurs affichent « Non sécurisé » (effraie les visiteurs)
- Les mots de passe transitent en clair sans HTTPS
Solutions gratuites :
| Solution | Difficulté | Renouvellement |
|---|---|---|
| Caddy | ⭐ Automatique | Automatique |
| Certbot + Nginx/Apache | ⭐⭐ 5-10 min config | Automatique via cron |
| Certificat manuel | ⭐⭐⭐ Complexe | Manuel tous les 90 jours |
5. Cache et compression — Accélérer les réponses
Section intitulée « 5. Cache et compression — Accélérer les réponses »Analogie :
- Cache = CDN edge node : servir depuis le cache géographiquement proche au lieu de requêter l’origin server
- Compression = compression réseau (gzip) : réduire la taille des paquets TCP pour économiser la bande passante
Impact concret :
| Sans optimisation | Avec optimisation | Gain |
|---|---|---|
| Page de 500 Ko | 150 Ko (gzip) | -70% bande passante |
| Recalculer à chaque visite | Servir depuis le cache | -90% temps serveur |
# Activer gzip (compression)gzip on;gzip_types text/plain text/css application/json application/javascript;6. Logs — Comprendre ce qui se passe
Section intitulée « 6. Logs — Comprendre ce qui se passe »Analogie : Comme les logs syslog/journalctl d’un serveur Linux. Quand un service crash, c’est là que vous trouvez les stack traces et erreurs.
Deux fichiers essentiels :
| Fichier | Contenu | Quand le consulter |
|---|---|---|
| access.log | Toutes les requêtes reçues | Analyser le trafic, détecter les attaques |
| error.log | Les erreurs du serveur | Toujours quand quelque chose ne marche pas |
# Voir les 20 dernières erreurstail -20 /var/log/nginx/error.log
# Suivre les erreurs en temps réel (Ctrl+C pour quitter)tail -f /var/log/nginx/error.logChecklist de production
Section intitulée « Checklist de production »Pourquoi une checklist ? Parce qu’oublier un seul point peut rendre votre site inaccessible, piratable ou lent. Cette liste couvre les erreurs les plus fréquentes chez les débutants.
Avant de mettre un serveur web en production, vérifiez ces 7 points :
-
Ports et firewall
Fenêtre de terminal # Ouvrir 80 (HTTP) et 443 (HTTPS)sudo ufw allow 80/tcpsudo ufw allow 443/tcp -
Permissions des fichiers
Fenêtre de terminal # Le serveur web (www-data ou nginx) doit pouvoir liresudo chown -R www-data:www-data /var/www/monsitesudo chmod -R 755 /var/www/monsite -
TLS / HTTPS
- Certificat valide (Let’s Encrypt)
- Renouvellement automatique (
certbot renew --dry-run) - HSTS activé après validation
-
Logs et rotation
Fenêtre de terminal # Vérifier que logrotate est configuréls /etc/logrotate.d/nginx # ou apache2 -
Reload sans downtime
Fenêtre de terminal # Toujours tester avant de rechargernginx -t && systemctl reload nginx -
Monitoring
- Endpoint
/nginx_statusou/server-status - Exporter Prometheus si besoin
- Endpoint
-
- Masquer la version (
server_tokens off;) - Headers de sécurité (X-Frame-Options, CSP)
- Limiter les méthodes HTTP autorisées
- Masquer la version (
Dépannage express
Section intitulée « Dépannage express »Vous voyez une erreur et vous ne savez pas par où commencer ? Ce tableau vous donne la cause la plus probable et où chercher. Dans 80% des cas, c’est l’une de ces 5 erreurs.
| Erreur | Ce que ça signifie | Première chose à vérifier |
|---|---|---|
| 403 Forbidden | Le serveur refuse l’accès (permissions ou config) | ls -la /var/www/... → le serveur web peut-il lire ? |
| 404 Not Found | Le fichier demandé n’existe pas | Le root dans la config pointe-t-il au bon dossier ? |
| 502 Bad Gateway | Le backend (Node/Python/PHP) ne répond pas | curl http://127.0.0.1:PORT → l’app tourne-t-elle ? |
| 504 Gateway Timeout | Le backend répond trop lentement | L’app est surchargée ou la base de données est lente |
| ”Address already in use” | Un autre processus utilise déjà le port 80/443 | ss -tlnp | grep :80 → qui occupe le port ? |
La méthode universelle (à mémoriser) :
# 1. Le service tourne-t-il ?systemctl status nginx # ou apache2 / caddy
# 2. La config est-elle valide ?nginx -t # ou apachectl configtest / caddy validate
# 3. Que disent les logs ?tail -20 /var/log/nginx/error.logGuides détaillés
Section intitulée « Guides détaillés »Jalons historiques (pour la culture)
Section intitulée « Jalons historiques (pour la culture) »L’évolution des serveurs web en 4 dates
| Année | Événement |
|---|---|
| 1991 | Tim Berners-Lee crée le premier serveur web (CERN HTTPd) |
| 1995 | Lancement d’Apache HTTP Server (dominant pendant 15 ans) |
| 2004 | Nginx résout le problème C10K (10 000 connexions simultanées) |
| 2015 | Caddy introduit HTTPS automatique par défaut |
Aujourd’hui, Nginx est le serveur le plus utilisé devant les sites à fort trafic, Apache reste très présent dans l’hébergement mutualisé et PHP, et Caddy gagne en popularité pour sa simplicité.
À retenir
Section intitulée « À retenir »- Nginx = reverse proxy + perfs + industrie standard
- Apache = compatibilité legacy + .htaccess + modules
- Caddy = HTTPS auto + simplicité + petits déploiements
- Virtual Hosts = plusieurs sites sur 1 IP
- Reverse proxy = le serveur web transmet à un backend
- HTTPS = obligatoire, gratuit avec Let’s Encrypt ou Caddy
- Logs =
error.logest votre meilleur ami pour débugger - Toujours tester la config avant de recharger (
nginx -t)