Aller au contenu
medium

Serveurs web : guide pratique et choix d'outils

14 min de lecture

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.

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…)

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 principalServeur recommandéPourquoi
Reverse proxy + perfsNginxArchitecture événementielle, faible RAM, cache intégré
HTTPS automatiqueCaddyCertificats Let’s Encrypt sans config, HTTP/3 natif
Compatibilité legacy / .htaccessApacheÉcosystème historique, modules dynamiques, PHP mod_php
Maximum de perfsNginx ou OpenLiteSpeedOptimisés pour le trafic intense
Simplicité avant toutCaddyConfig en 5 lignes, zéro complexité TLS
CritèreNginxApacheCaddy
ArchitectureÉvénementielle asyncProcessus/threads (MPM)Événementielle Go
HTTPSManuel (Certbot)Manuel (Certbot)Automatique
ConfigFichiers .confFichiers .conf + .htaccessCaddyfile simple
HTTP/2OuiOuiOui
HTTP/3 (QUIC)ExpérimentalNonNatif
Reverse proxyExcellentBonTrès bon
CacheIntégréModulesBasique
RAMTrès faibleModérée à élevéeFaible
Courbe d’apprentissageMoyenneMoyenneFacile
Cas idéalProd haute chargeLegacy PHP, CMSPetits/moyens déploiements

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éponseSignificationExemple concret
200OK, voici le contenuPage affichée normalement
301/302RedirectionL’URL a changé, suivez ce lien
403InterditVous n’avez pas le droit d’accéder
404IntrouvableLe fichier n’existe pas
500Erreur serveurBug dans le code ou la config
502Mauvaise passerelleLe 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.1
Host: www.example.com
User-Agent: Mozilla/5.0
  • GET = 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 OK
Content-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 IP
server {
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.js
location / {
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)

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 :

SolutionDifficultéRenouvellement
Caddy⭐ AutomatiqueAutomatique
Certbot + Nginx/Apache⭐⭐ 5-10 min configAutomatique via cron
Certificat manuel⭐⭐⭐ ComplexeManuel 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 optimisationAvec optimisationGain
Page de 500 Ko150 Ko (gzip)-70% bande passante
Recalculer à chaque visiteServir depuis le cache-90% temps serveur
# Activer gzip (compression)
gzip on;
gzip_types text/plain text/css application/json application/javascript;

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 :

FichierContenuQuand le consulter
access.logToutes les requêtes reçuesAnalyser le trafic, détecter les attaques
error.logLes erreurs du serveurToujours quand quelque chose ne marche pas
Fenêtre de terminal
# Voir les 20 dernières erreurs
tail -20 /var/log/nginx/error.log
# Suivre les erreurs en temps réel (Ctrl+C pour quitter)
tail -f /var/log/nginx/error.log

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 :

  1. Ports et firewall

    Fenêtre de terminal
    # Ouvrir 80 (HTTP) et 443 (HTTPS)
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
  2. Permissions des fichiers

    Fenêtre de terminal
    # Le serveur web (www-data ou nginx) doit pouvoir lire
    sudo chown -R www-data:www-data /var/www/monsite
    sudo chmod -R 755 /var/www/monsite
  3. TLS / HTTPS

    • Certificat valide (Let’s Encrypt)
    • Renouvellement automatique (certbot renew --dry-run)
    • HSTS activé après validation
  4. Logs et rotation

    Fenêtre de terminal
    # Vérifier que logrotate est configuré
    ls /etc/logrotate.d/nginx # ou apache2
  5. Reload sans downtime

    Fenêtre de terminal
    # Toujours tester avant de recharger
    nginx -t && systemctl reload nginx
  6. Monitoring

    • Endpoint /nginx_status ou /server-status
    • Exporter Prometheus si besoin
  7. Hardening

    • Masquer la version (server_tokens off;)
    • Headers de sécurité (X-Frame-Options, CSP)
    • Limiter les méthodes HTTP autorisées

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.

ErreurCe que ça signifiePremière chose à vérifier
403 ForbiddenLe serveur refuse l’accès (permissions ou config)ls -la /var/www/... → le serveur web peut-il lire ?
404 Not FoundLe fichier demandé n’existe pasLe root dans la config pointe-t-il au bon dossier ?
502 Bad GatewayLe backend (Node/Python/PHP) ne répond pascurl http://127.0.0.1:PORT → l’app tourne-t-elle ?
504 Gateway TimeoutLe backend répond trop lentementL’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/443ss -tlnp | grep :80 → qui occupe le port ?

La méthode universelle (à mémoriser) :

Fenêtre de terminal
# 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.log
L’évolution des serveurs web en 4 dates
AnnéeÉvénement
1991Tim Berners-Lee crée le premier serveur web (CERN HTTPd)
1995Lancement d’Apache HTTP Server (dominant pendant 15 ans)
2004Nginx résout le problème C10K (10 000 connexions simultanées)
2015Caddy 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é.

  1. Nginx = reverse proxy + perfs + industrie standard
  2. Apache = compatibilité legacy + .htaccess + modules
  3. Caddy = HTTPS auto + simplicité + petits déploiements
  4. Virtual Hosts = plusieurs sites sur 1 IP
  5. Reverse proxy = le serveur web transmet à un backend
  6. HTTPS = obligatoire, gratuit avec Let’s Encrypt ou Caddy
  7. Logs = error.log est votre meilleur ami pour débugger
  8. Toujours tester la config avant de recharger (nginx -t)

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.