Cours B2-12 - Services web, HTTPS et reverse proxy Traefik
Cours · Fiche de cours

B2-12 - Services web, HTTPS et reverse proxy Traefik

B2-12 Services web, HTTPS et reverse proxy Traefik

🎓 SIO2 · semestre 3 ⏱️ 5 h (cours + TP) 🎯 Bloc 2 – SISR Comprendre une requête HTTP, publier un site avec Apache ou Nginx, le sécuriser en HTTPS, puis placer devant tous les services web un reverse proxy Traefik configuré en fichiers dynamiques.

🎯 Objectifs

  • Décrire le dialogue HTTP : URL, requête, méthodes, codes de réponse.
  • Publier un site avec Apache ou Nginx (hôtes virtuels, journaux).
  • Expliquer HTTPS et choisir un certificat (autosigné, autorité interne, Let's Encrypt).
  • Justifier l'usage d'un reverse proxy et nommer les plus utilisés.
  • Configurer Traefik avec le file provider : points d'entrée, routeurs, services, middlewares, TLS.
  • Vérifier et dépanner un service web avec curl et les journaux.

📋 Prérequis

🧭 Référentiel

  • B2.2 Installer, configurer et tester un service réseau (serveur web).
  • B2.3 Exploiter : journaux, disponibilité, dépannage.
  • B3 Sécuriser les échanges : HTTPS, en-têtes de sécurité, exposition minimale.
Test express des prérequis 3 questions · 2 minutes · conseillé avant de commencer

1. Quel enregistrement DNS associe le nom intranet.broceliande.lan à une adresse IPv4 ?

L'enregistrement A donne l'adresse IPv4 d'un nom (AAAA pour IPv6). MX désigne le serveur de messagerie, PTR fait la résolution inverse. À revoir : B2-11 · DNS.

2. Sous Debian, quelle commande relance le service nginx après une modification ?

Les services se pilotent avec systemctl ; reload relit la configuration sans couper les connexions. À revoir : B2-14 · Debian 13.

3. Dans un certificat, que contient-on pour permettre aux clients de chiffrer ?

Le certificat publie la clé publique et l'identité du serveur, garanties par la signature d'une autorité. La clé privée ne quitte jamais le serveur. À revoir : B3-04 · Cryptographie.
http://172.16.50.20 http://…:8080/glpi http://…:3000 ? !!! SRV-WEB mots de passe en clair 3 adresses, 3 ports, 0 cadenas

Brocéliande Logistique (entreprise fictive, 60 salariés) publie peu à peu ses outils internes : un intranet, l'application de gestion de parc GLPI, une page de supervision. Chacun a été installé « là où il y avait de la place », avec son propre port et sans chiffrement : les salariés retiennent des adresses du type http://172.16.50.20:8080 et les mots de passe circulent en clair sur le réseau.

Le responsable informatique veut une adresse lisible par service (intranet.broceliande.lan, glpi.broceliande.lan…), du HTTPS partout et un seul point d'entrée à surveiller. Il te confie la mise en place d'un serveur web propre, puis d'un reverse proxy Traefik devant l'ensemble des services.

Le coursLe dialogue HTTP, les serveurs Apache et Nginx, HTTPS et les certificats, puis le reverse proxy Traefik, sa configuration en fichiers et son dépannage.

1. Le web en une requête

Le web repose sur le protocole HTTP (HyperText Transfer Protocol) : un client (navigateur, application, commande curl) envoie une requête à un serveur, qui renvoie une réponse. HTTP fonctionne au-dessus de TCP, sur le port 80 ; HTTPS ajoute une couche de chiffrement TLS, sur le port 443.

URL (Uniform Resource Locator) : adresse complète d'une ressource. Elle indique le protocole, le nom du serveur, éventuellement le port, puis le chemin de la ressource sur le serveur : https://intranet.broceliande.lan:443/rh/conges.html.

  • https://Le protocole (schéma). http : en clair, port 80 par défaut ; https : chiffré, port 443 par défaut.
  • intranet.broceliande.lanLe nom d'hôte, que le client résout en adresse IP grâce au DNS. Il est aussi envoyé au serveur dans l'en-tête Host : c'est grâce à lui qu'un même serveur héberge plusieurs sites.
  • :443Le port TCP, facultatif quand c'est la valeur par défaut du protocole.
  • /rh/conges.htmlLe chemin de la ressource demandée sur le serveur.
PC-COMPTAnavigateur SRV-01 · DNS172.16.50.10 SRV-WEB172.16.50.20 intranet.broceliande.lan ? → 172.16.50.20 TCP 80 : SYN · SYN-ACK · ACK GET / HTTP/1.1Host: intranet.broceliande.lan HTTP/1.1 200 OK<html>…</html> Afficher http://intranet.broceliande.lan
Avant la moindre page, il y a toujours une résolution DNS et une connexion TCP.

1.1 Les méthodes et les codes de réponse

MéthodeRôleExemple
GETDemander une ressourceAfficher une page
POSTEnvoyer des données au serveurValider un formulaire de connexion
PUT / DELETERemplacer / supprimer une ressourceAPI d'une application
HEADComme GET, mais seulement les en-têtescurl -I pour un test rapide
FamilleSensCodes à connaître
2xxSuccès200 OK
3xxRedirection301 déplacé définitivement (http → https), 302 temporaire
4xxErreur côté client401 authentification requise, 403 interdit, 404 introuvable
5xxErreur côté serveur500 erreur interne, 502 mauvaise passerelle (le proxy n'obtient pas de réponse valable), 503 service indisponible, 504 délai dépassé

Un code 4xx met en cause la requête (mauvaise adresse, droits) ; un code 5xx met en cause le serveur ou ce qu'il y a derrière. Derrière un reverse proxy, un 502 ou un 504 signifie presque toujours que l'application cible est arrêtée ou injoignable.

2. Apache et Nginx : publier un site

Les deux serveurs web les plus répandus sous Linux sont Apache (httpd) et Nginx. Tous deux savent servir des fichiers, exécuter une application (PHP par exemple) et héberger plusieurs sites sur une même machine grâce aux hôtes virtuels.

ApacheNginx
Paquet Debianapache2nginx
Configuration des sites/etc/apache2/sites-available/, activée par a2ensite/etc/nginx/sites-available/, activée par un lien dans sites-enabled/
Bloc d'un site<VirtualHost *:80>server { … }
Fichiers du siteDocumentRootroot
Journaux/var/log/apache2//var/log/nginx/
Tester la syntaxeapache2ctl configtestnginx -t
Points fortsModules, fichiers .htaccess, très documentéLéger, très performant, excellent reverse proxy
Debian 13 Nginx/etc/nginx/sites-available/intranet
server {
    listen 80;
    server_name intranet.broceliande.lan;     # nom attendu dans l'en-tête Host
    root /var/www/intranet;                   # dossier des pages du site
    index index.html;
    access_log /var/log/nginx/intranet.access.log;
    error_log  /var/log/nginx/intranet.error.log;
}
Debian 13 activation du site
$ sudo ln -s /etc/nginx/sites-available/intranet /etc/nginx/sites-enabled/
$ sudo nginx -t # « syntax is ok » avant de recharger
$ sudo systemctl reload nginx
Debian 13 Apache · même site/etc/apache2/sites-available/intranet.conf
<VirtualHost *:80>
    ServerName intranet.broceliande.lan
    DocumentRoot /var/www/intranet
    ErrorLog ${APACHE_LOG_DIR}/intranet-error.log
    CustomLog ${APACHE_LOG_DIR}/intranet-access.log combined
</VirtualHost>
# puis : sudo a2ensite intranet && sudo apache2ctl configtest && sudo systemctl reload apache2

2.1 Lire une ligne de journal d'accès

Journal /var/log/nginx/intranet.access.log
172.16.20.1 - - [14/Nov/2026:09:12:44 +0100] "GET /rh/conges.html HTTP/1.1" 200 5320 "-" "Mozilla/5.0 (Windows NT 10.0…)"
  • 172.16.20.1Adresse IP du client (ici PC-COMPTA). Derrière un reverse proxy, c'est l'adresse du proxy : la vraie adresse est transmise dans l'en-tête X-Forwarded-For.
  • [14/Nov/2026:09:12:44 +0100]Date et heure de la requête : d'où l'importance d'une horloge juste (NTP).
  • "GET /rh/conges.html HTTP/1.1"La méthode, le chemin demandé et la version du protocole.
  • 200 5320Le code de réponse et la taille de la réponse en octets.
  • "Mozilla/5.0 …"Le User-Agent : navigateur ou outil utilisé par le client.

3. HTTPS et les certificats

En HTTP, tout circule en clair : un poste qui écoute le réseau lit les pages, les cookies de session et les mots de passe. HTTPS encapsule HTTP dans TLS, qui apporte trois garanties : la confidentialité (chiffrement), l'intégrité (rien n'est modifié en route) et l'authentification du serveur (on parle bien à intranet.broceliande.lan, grâce à son certificat).

NavigateurSRV-WEB · 443 ClientHello certificatclé publique + signature ✔ nom = intranet.broceliande.lan✔ date valide · ✔ autorité de confiance canal chiffré : la requête HTTP passe dedans La poignée de main TLS (version simplifiée)
Le certificat prouve l'identité du serveur ; la clé de session, elle, chiffre les échanges.

3.1 Quel certificat choisir ?

TypeQui le signe ?Accepté par les navigateurs ?Usage
AutosignéLe serveur lui-mêmeNon : alerte de sécuritéTests, maquette
Autorité interne (AD CS, PKI de l'entreprise)L'autorité de l'entreprise, déployée sur les postes par GPOOui, sur les postes de l'entrepriseServices internes en .lan
Let's Encrypt (ACME)Autorité publique gratuite, certificat de 90 jours renouvelé automatiquementOui, partoutServices publiés sur Internet avec un vrai nom de domaine
Autorité commercialeAutorité publique payante (validation de l'organisation)Oui, partoutSites institutionnels, besoins particuliers

Avant de délivrer un certificat, Let's Encrypt vérifie que tu contrôles bien le nom demandé. Défi HTTP-01 : un fichier doit être servi sur le port 80 du nom. Défi DNS-01 : un enregistrement TXT doit être créé dans la zone (seule méthode possible pour un certificat wildcard *.exemple.fr). Un nom en .lan n'existe pas sur Internet : Let's Encrypt ne peut pas le valider, d'où l'autorité interne.

Debian 13 certificat autosigné pour la maquette
$ sudo openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
  -keyout /etc/ssl/private/intranet.key -out /etc/ssl/certs/intranet.crt \
  -subj "/CN=intranet.broceliande.lan" -addext "subjectAltName=DNS:intranet.broceliande.lan"
$ openssl x509 -in /etc/ssl/certs/intranet.crt -noout -subject -dates # vérifier le nom et les dates

Les navigateurs ne regardent plus le champ CN : le nom doit figurer dans l'extension subjectAltName (SAN). Un certificat sans SAN, ou avec un autre nom que celui tapé dans la barre d'adresse, provoque l'alerte NET::ERR_CERT_COMMON_NAME_INVALID.

4. Le reverse proxy : un seul point d'entrée

Un reverse proxy (mandataire inverse) se place devant les serveurs web. Les clients ne s'adressent qu'à lui ; il lit le nom demandé (en-tête Host) et transmet la requête au bon service interne, puis renvoie la réponse. À l'inverse, un proxy classique se place devant les clients pour filtrer leurs accès à Internet.

Bureau Intranet Bureau GLPI Bureau Supervision ACCUEILreverse proxy ? ? visiteurs une seule porte badge vérifié à l'entrée= certificat TLS, filtrage

Pour bien comprendre : l'accueil d'un immeuble

Dans un immeuble de bureaux, les visiteurs n'entrent que par une seule porte, celle de l'accueil. L'hôtesse demande qui ils viennent voir et les oriente vers le bon bureau : c'est le reverse proxy, qui lit le nom demandé et transmet au bon service.

C'est aussi à l'accueil qu'on vérifie les badges et qu'on refuse les intrus : le proxy porte les certificats HTTPS et peut filtrer. Les bureaux, eux, n'ont pas besoin d'avoir chacun leur porte sur la rue.

Clique sur une adresse tapée par un salarié pour suivre la requête jusqu'au bon service.

intranet.broceliande.lan glpi.broceliande.lan supervision.broceliande.lan Traefik · 443 un seul certificat par nom Nginx172.16.50.20:8080 GLPI172.16.50.35:80 Supervision172.16.99.21:3001 en HTTP, sur le réseau interne Ce que tape le salarié (HTTPS)

Les trois adresses arrivent sur la même porte : c'est le nom qui décide de la destination.

Une seule adresse IP et un seul port ouverts pour tous les services : le proxy fait l'aiguillage.

4.1 Ce qu'apporte un reverse proxy

  • Point d'entrée uniqueUn seul serveur exposé (ports 80 et 443), les applications restent sur le réseau interne.
  • Terminaison TLSLes certificats sont gérés à un seul endroit ; le proxy déchiffre puis transmet en HTTP aux services internes.
  • Routage par nomChaque nom (en-tête Host) mène à son application, sans numéro de port à retenir.
  • Répartition de chargePlusieurs serveurs identiques derrière un même nom : le proxy répartit les requêtes et écarte un serveur en panne (B2-25).
  • SécuritéEn-têtes de sécurité, authentification, limitation de débit ajoutés sans toucher aux applications (B3-14).

4.2 Les reverse proxy les plus connus

LogicielPoints fortsConfiguration
NginxServeur web et proxy très répandu, performantBlocs location avec proxy_pass
HAProxySpécialiste de la répartition de charge, très utilisé en productionSections frontend / backend
CaddyHTTPS automatique avec Let's Encrypt, configuration très courteFichier Caddyfile
TraefikPensé pour les environnements modernes : configuration dynamique rechargée à chaud, certificats ACME, tableau de bordFichiers YAML (file provider) ou découverte automatique

Au labo et dans cette fiche, on utilise Traefik, configuré uniquement par des fichiers : c'est lisible, versionnable dans Git et indépendant de la façon dont les applications sont installées (paquet, VM, conteneur).

5. Traefik : les quatre briques

Traefik traite chaque requête en suivant toujours le même chemin. Retenir ces quatre mots, c'est savoir lire n'importe quelle configuration Traefik.

entryPointwebsecure · :443 routerHost(`intranet…`) + TLS middlewaresen-têtes, authentification servicehttp://127.0.0.1:8080 1. sur quel port ? 2. quel nom ? quel certificat ? 3. que modifier au passage ? 4. vers quelle application ? Une requête traverse Traefik de gauche à droite
Point d'entrée → routeur → middlewares → service : le même chemin pour toutes les requêtes.

5.1 Configuration statique et configuration dynamique

Configuration statiqueConfiguration dynamique
Fichier/etc/traefik/traefik.ymlFichiers du dossier /etc/traefik/dynamic/
ContenuPoints d'entrée, fournisseurs (providers), journaux, tableau de bordRouteurs, services, middlewares, certificats
Prise en compteAu démarrage : il faut redémarrer TraefikÀ chaud : Traefik surveille le dossier et applique tout de suite
Fréquence de modificationRareÀ chaque nouveau service publié

Provider (fournisseur) : source d'où Traefik lit sa configuration dynamique. Le file provider lit des fichiers YAML ou TOML. D'autres providers découvrent les services tout seuls (Docker avec des labels, Kubernetes) : pratiques pour des conteneurs, mais la configuration est alors dispersée dans chaque application. Au labo, on garde tout dans des fichiers, un par service publié.

6. Configurer Traefik en fichiers dynamiques

6.1 La configuration statique

YAML /etc/traefik/traefik.ymllu au démarrage
entryPoints:
  web:
    address: ":80"
    http:
      redirections:              # tout le trafic HTTP est renvoyé vers HTTPS (code 301)
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"

providers:
  file:
    directory: /etc/traefik/dynamic   # un fichier par service publié
    watch: true                       # rechargement à chaud

api:
  dashboard: true                     # tableau de bord, publié par un routeur protégé

log:
  level: INFO
accessLog: {}                         # journal des requêtes

6.2 Un fichier dynamique par service

YAML /etc/traefik/dynamic/intranet.ymlappliqué à chaud
http:
  routers:
    intranet:
      rule: "Host(`intranet.broceliande.lan`)"
      entryPoints: [websecure]
      service: intranet
      middlewares: [securite]
      tls: {}                          # HTTPS, avec le certificat déclaré plus bas

  services:
    intranet:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:8080"   # l'application, joignable en HTTP interne

  middlewares:
    securite:
      headers:
        stsSeconds: 31536000           # HSTS : le navigateur n'utilisera plus que HTTPS
        frameDeny: true                # interdit l'affichage dans un cadre (clickjacking)
        contentTypeNosniff: true

tls:
  certificates:
    - certFile: /etc/traefik/certs/intranet.crt
      keyFile: /etc/traefik/certs/intranet.key
  • ruleLa condition qui sélectionne les requêtes : Host(`…`) pour un nom, PathPrefix(`/api`) pour un chemin, combinables avec &&. Attention aux accents graves autour du nom.
  • entryPointsLes ports sur lesquels ce routeur écoute : ici seulement websecure.
  • serviceLe nom du service vers lequel envoyer, défini dans la section services.
  • middlewaresLa liste, dans l'ordre, des traitements appliqués au passage.
  • tlsActive HTTPS sur ce routeur. Traefik choisit, parmi les certificats déclarés, celui dont le nom correspond.

6.3 Publier le tableau de bord, protégé

YAML /etc/traefik/dynamic/dashboard.yml
http:
  routers:
    dashboard:
      rule: "Host(`traefik.broceliande.lan`)"
      entryPoints: [websecure]
      service: api@internal            # service interne de Traefik
      middlewares: [admin-auth]
      tls: {}
  middlewares:
    admin-auth:
      basicAuth:
        users:
          - "admin:$apr1$…"            # empreinte produite par : htpasswd -nb admin MotDePasse

Un service publié = un fichier dans dynamic/, qui contient son routeur, son service et ses middlewares. Pour retirer un service, on supprime son fichier : Traefik le retire aussitôt. Ces fichiers se versionnent dans Git, comme le reste de la configuration.

Complète le fichier glpi.yml qui publie GLPI (172.16.50.35, port 80) sous le nom glpi.broceliande.lan, en HTTPS. Vérifie chaque ligne avec ✓.

rule:
entryPoints:
service:
tls:
- url:

7. Sécuriser un service web

  • HTTPS partout : redirection 301 de HTTP vers HTTPS, puis HSTS pour que le navigateur n'essaie plus HTTP.
  • Exposition minimale : seuls les ports 80 et 443 du proxy sont ouverts ; les applications n'écoutent que sur le réseau interne ou sur 127.0.0.1.
  • En-têtes de sécurité : Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Content-Security-Policy.
  • Discrétion : masquer la version du serveur (server_tokens off; dans Nginx, ServerTokens Prod dans Apache).
  • Interfaces d'administration (tableau de bord Traefik, phpMyAdmin) : jamais publiées sans authentification, idéalement accessibles depuis le VLAN de gestion seulement.
  • Mises à jour du serveur web, du proxy et des applications : la plupart des attaques web visent des versions connues comme vulnérables (B3-07).
  • Moindre privilège : le serveur web tourne sous un compte sans droits (www-data), les fichiers du site ne lui appartiennent pas en écriture.

Sur un réseau où l'intranet est en HTTP, un poste compromis peut se placer entre les salariés et le serveur (empoisonnement ARP) et lire les identifiants envoyés par le formulaire de connexion. En HTTPS, il ne voit qu'un flux chiffré ; s'il présente son propre certificat, le navigateur affiche une alerte, d'où la règle : ne jamais cliquer sur « Continuer quand même » sur un site de l'entreprise.

8. Vérifier et dépanner

8.1 Les outils

CommandeCe qu'elle montre
curl -I http://intranet.broceliande.lanLes en-têtes de la réponse : code (redirection vers HTTPS attendue : 308, car -I envoie un HEAD ; un navigateur reçoit 301), serveur, redirection
curl -vk https://intranet.broceliande.lanLe détail de la poignée de main TLS et du certificat présenté (-k accepte un certificat autosigné)
curl --resolve intranet.broceliande.lan:443:172.16.50.20 https://…Tester un nom avant que le DNS soit en place
ss -tlnpLes ports en écoute et le programme qui les tient (80, 443, 8080…)
sudo journalctl -u traefik -fLes messages de Traefik en direct (erreur de syntaxe YAML, certificat illisible)
tail -f /var/log/nginx/*.logLes requêtes reçues par l'application et ses erreurs
Debian 13 test rapide depuis un poste
$ curl -I http://intranet.broceliande.lan
HTTP/1.1 308 Permanent Redirect
Location: https://intranet.broceliande.lan/

$ curl -kI https://intranet.broceliande.lan
HTTP/2 200
strict-transport-security: max-age=31536000
x-frame-options: DENY

Méthode : on remonte du client vers l'application. Le nom se résout-il (nslookup) ? Le port 443 du proxy répond-il ? Le routeur Traefik existe-t-il (tableau de bord, journaux) ? L'application répond-elle en direct, sans le proxy (curl http://127.0.0.1:8080) ?

8.2 Entraîne-toi : les tickets du support

Tu es de permanence au support de Brocéliande Logistique. Six tickets arrivent les uns après les autres : lis le message, observe le relevé, puis choisis la cause. Applique la méthode du client vers l'application.

File d'attente du support6 tickets · un à la fois · l'explication s'affiche après ta réponse
Ticket n° 1De : comptabilitéPriorité haute
« L'intranet affiche "Bad Gateway" depuis ce matin. Hier soir, tout fonctionnait. »
Debian 13 SRV-WEB · relevé du technicien
$ curl -kI https://intranet.broceliande.lan
HTTP/2 502
$ systemctl is-active nginx
inactive

Quelle est la cause la plus probable ?

Cause : le code 502 vient du proxy : il a bien reçu la requête, mais n'obtient pas de réponse du service cible. Nginx est arrêté (mise à jour nocturne, erreur de configuration). Correction : sudo nginx -t, puis sudo systemctl start nginx et lecture de journalctl -u nginx pour comprendre l'arrêt.

Ticket n° 2De : directionPriorité moyenne
« Mon navigateur affiche "Votre connexion n'est pas privée" sur glpi.broceliande.lan, alors que l'intranet s'ouvre sans alerte. »
Debian 13 certificat présenté pour GLPI
$ curl -vk https://glpi.broceliande.lan 2>&1 | grep subject
*  subject: CN=TRAEFIK DEFAULT CERT

Quelle est la cause ?

Cause : aucun certificat déclaré ne correspond au nom tapé : Traefik se rabat sur le certificat qu'il génère lui-même (TRAEFIK DEFAULT CERT), que le navigateur refuse. Correction : émettre un certificat dont le SAN contient glpi.broceliande.lan (ou un certificat qui couvre les deux noms) et l'ajouter dans la section tls.certificates d'un fichier dynamique.

Ticket n° 3De : technicienPriorité haute
« J'ai ajouté supervision.yml dans /etc/traefik/dynamic, mais la page renvoie 404 page not found. Le service de supervision répond pourtant en direct. »
Debian 13 journal de Traefik
$ sudo journalctl -u traefik --since "5 min ago"
level=error msg="Error occurred during watcher callback:
 yaml: line 4: mapping values are not allowed in this context"
 providerName=file

Quelle est la cause ?

Cause : un 404 renvoyé par Traefik signifie qu'aucun routeur ne correspond à la requête. Ici, le fichier n'a pas été chargé à cause de l'indentation (YAML n'accepte que des espaces, alignés). Correction : corriger la ligne 4 ; le rechargement est automatique, inutile de redémarrer.

Ticket n° 4De : responsable informatiqueSécurité
« Un stagiaire me signale qu'il ouvre l'application de supervision directement sur http://172.16.99.21:3001, sans passer par le proxy ni s'authentifier. »
Debian 13 serveur de supervision
$ ss -tlnp | grep 3001
LISTEN 0 511   0.0.0.0:3001   0.0.0.0:*   users:(("node",pid=812))

Quel est le problème ?

Cause : le proxy protège seulement ce qui passe par lui. Correction : limiter l'écoute de l'application (à 127.0.0.1 si le proxy est sur la même machine), ou filtrer le port 3001 par pare-feu pour n'autoriser que l'adresse du proxy.

Ticket n° 5De : comptabilitéPriorité moyenne
« Quand je tape intranet.broceliande.lan, j'arrive sur une page "Welcome to nginx!" au lieu de l'intranet. »
Debian 13 SRV-WEB
$ ls /etc/nginx/sites-enabled/
default
$ ls /etc/nginx/sites-available/
default  intranet

Quelle est la cause ?

Cause : le fichier existe dans sites-available mais aucun lien n'a été créé dans sites-enabled. Correction : sudo ln -s /etc/nginx/sites-available/intranet /etc/nginx/sites-enabled/, sudo nginx -t, sudo systemctl reload nginx ; on peut aussi désactiver le site default.

Ticket n° 6De : technicienQuestion
« Après avoir mis Traefik devant l'intranet, tous les accès du journal Nginx viennent de la même adresse, 127.0.0.1. Comment savoir quel poste a consulté une page ? »
Journal intranet.access.log
127.0.0.1 - - [14/Nov/2026:10:02:11 +0100] "GET / HTTP/1.1" 200 5320
127.0.0.1 - - [14/Nov/2026:10:02:15 +0100] "GET /rh/ HTTP/1.1" 200 2104

Que faut-il faire ?

Cause : vu de l'application, le client est le proxy. Traefik transmet l'adresse réelle dans X-Forwarded-For. Correction : dans Nginx, utiliser le module real_ip (set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For;) ; le journal d'accès de Traefik contient aussi l'adresse du client.

9. À l'examen et en entreprise

  • Schéma attendu : client → DNS → reverse proxy (ports 80/443) → services internes, avec les noms publiés, les ports et le sens des flux.
  • Justifier ses choix : pourquoi un reverse proxy, pourquoi tel certificat (autorité interne pour des noms en .lan, Let's Encrypt pour un nom public), pourquoi la configuration en fichiers.
  • Cahier de recette : redirection HTTP → HTTPS (301), page en 200, certificat valide pour chaque nom, accès direct à l'application refusé, tableau de bord protégé.
  • Exploitation : où sont les journaux, comment ajouter un nouveau service (un fichier dans dynamic/), comment renouveler un certificat.

10. L'essentiel

  1. HTTP : le client envoie une requête (méthode, chemin, en-tête Host), le serveur renvoie une réponse avec un code. Port 80 ; HTTPS = HTTP dans TLS, port 443.
  2. Codes : 2xx succès, 3xx redirection (301), 4xx erreur du client (403, 404), 5xx erreur du serveur (500, 502, 504).
  3. Apache et Nginx hébergent plusieurs sites grâce aux hôtes virtuels, choisis d'après le nom demandé.
  4. Toujours tester la syntaxe (nginx -t) avant de recharger (systemctl reload).
  5. TLS apporte confidentialité, intégrité et authentification du serveur par son certificat ; le nom doit figurer dans le SAN.
  6. Certificat : autosigné pour tester, autorité interne pour les noms .lan, Let's Encrypt (ACME) pour un nom public.
  7. Le reverse proxy est le point d'entrée unique : terminaison TLS, routage par nom, répartition, sécurité.
  8. Traefik : entryPoint → router → middlewares → service.
  9. File provider : un fichier YAML par service dans dynamic/, rechargé à chaud ; jamais de labels Docker au labo.
  10. Dépanner du client vers l'application : DNS, port 443, routeur Traefik, application en direct. Un 502 = application injoignable.
WEBHTTP · HTTPS HTTPGET, POST · en-tête Host200 · 301 · 404 · 502 ServeursApache · Nginxhôtes virtuels · journaux HTTPSTLS · certificat · SANinterne · Let's Encrypt Reverse proxy1 entrée · routage par nomNginx · HAProxy · Caddy TraefikentryPoint → router→ middleware → service Dépannercurl -I · ss -tlnpjournalctl -u traefik
La fiche en une image : à refaire de mémoire, sur une feuille, avant de passer aux exercices.

Les commandes clés

Pour…Commandes
Activer un site Nginxln -s …/sites-available/site …/sites-enabled/ · nginx -t · systemctl reload nginx
Activer un site Apachea2ensite site · apache2ctl configtest · systemctl reload apache2
Certificat de testopenssl req -x509 -newkey rsa:2048 -nodes … -addext "subjectAltName=DNS:nom"
Publier avec Traefikun fichier /etc/traefik/dynamic/service.yml : routers, services, middlewares, tls
Testercurl -I http://nom (308) · curl -kI https://nom (200)
Ports et programmesss -tlnp
Journauxjournalctl -u traefik -f · /var/log/nginx/ · /var/log/apache2/

Tout cela tient sur une page : utilise le bouton Mémo à imprimer en haut de la fiche.

Tutoriels liés

Des guides PDF pas à pas pour mettre cette fiche en pratique sur tes machines.

Voir tous les tutoriels

La pratiqueLe quiz noté pour vérifier tes acquis, les exercices à rendre à ton professeur, puis le fil rouge Packet Tracer et le reverse proxy au labo.

11. Quiz noté

8 questions · 10 minutesRéponds à toutes les questions, puis valide. Seule ta première tentative est enregistrée : elle compte dans ton suivi. Ensuite, tu peux t'entraîner autant que tu veux.

1. Sur quel port TCP un serveur HTTPS écoute-t-il par défaut ?

2. Le reverse proxy renvoie 502 Bad Gateway. Qu'est-ce que cela indique ?

3. Grâce à quel en-tête un serveur web héberge-t-il plusieurs sites sur une seule adresse IP ?

4. Dans Traefik, quel élément porte la règle Host(`intranet.broceliande.lan`) ?

5. Quel est l'avantage de la configuration dynamique lue par le file provider ?

6. Pourquoi ne peut-on pas obtenir un certificat Let's Encrypt pour intranet.broceliande.lan ?

7. À quoi sert l'en-tête HSTS (Strict-Transport-Security) ?

8. Le fichier /etc/nginx/sites-available/intranet existe mais Nginx affiche sa page par défaut. Que manque-t-il ?

12. Exercices : à toi de répondre

Écris ta réponse sous chaque énoncé et envoie-la à ton professeur. Quand il l'a validée, le corrigé s'affiche à la place du cadenas ; s'il te la renvoie « à revoir », lis son commentaire et corrige.

Exercice 1 – Comprendre (SIO2)

Un salarié tape http://glpi.broceliande.lan dans son navigateur. Décris, dans l'ordre, tout ce qui se passe jusqu'à l'affichage de la page GLPI en HTTPS (DNS, connexions, codes de réponse, rôle de chaque élément de Traefik).

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 2 – Configurer (SIO2)

Brocéliande installe un wiki interne qui répond en HTTP sur 172.16.50.24, port 3000. Écris le fichier dynamique Traefik qui le publie en HTTPS sous le nom wiki.broceliande.lan, avec les en-têtes de sécurité du middleware securite déjà défini dans intranet.yml. Indique où tu places ce fichier et comment tu vérifies qu'il est pris en compte.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 3 – Dépanner (SIO2)

Un technicien a publié l'intranet avec le routeur ci-dessous. curl -I http://intranet.broceliande.lan renvoie bien la redirection 308, mais curl -kI https://intranet.broceliande.lan renvoie 404 page not found. Explique la panne et corrige.

YAML extrait de intranet.yml
    intranet:
      rule: "Host(`intranet.broceliande.lan`)"
      entryPoints: [web]
      service: intranet

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 4 – Concevoir (SIO2)

La direction veut que les commerciaux en déplacement accèdent à l'intranet depuis Internet. Propose une solution argumentée (une dizaine de lignes) : nom, certificat, emplacement du proxy, ports ouverts, protection des comptes. Évoque aussi l'alternative du VPN.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

13. Fil rouge : l'intranet de Brocéliande Logistique

Étape 13sur 17
Fil rouge Packet Tracer · Intranet et site webTu construis le réseau de Brocéliande Logistique fiche après fiche : chaque étape repart de la précédente.
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17

Tu pars de ta maquette de l'étape 12 (B2-09) : FR-12-NOM-Prenom.pkt.

Tu enregistres FR-13-NOM-Prenom.pkt, point de départ de l'étape 14 (B2-26 · Téléphonie et qualité de service).

Où tu en es, où tu vas

Le tableau donne l'état des équipements concernés à l'entrée de l'étape (fin de l'étape 12, passerelle redondante HSRP) et ce que tu dois obtenir à la sortie. Les autres équipements ne changent pas. Tu n'as pas ta maquette FR-12 ? Reprends les fiches précédentes du fil rouge dans l'ordre : chaque étape repart de la sortie de la précédente.

ÉquipementModèleÀ l'entréeÀ la sortie
SRV-WEBServer-PTAbsent172.16.50.20/24, passerelle 172.16.50.254, DNS 172.16.50.10 ; services HTTP et HTTPS actifs, page d'accueil de l'intranet
SW12960-24TTFa0/18 en VLAN 998 (parking), éteintFa0/18 en access VLAN 50, PortFast, activé
SRV-01Server-PTDHCP, DNS (zone broceliande.lan), RADIUSEnregistrement A intranet.broceliande.lan → 172.16.50.20
R1 et R3Routeur 1941HSRP : R1 .252 actif, R3 .253 en attente, passerelle virtuelle .254Inchangés : SRV-WEB utilise la passerelle virtuelle 172.16.50.254
PostesPC-PTAdresses DHCP, DNS 172.16.50.10Inchangés : ils ouvrent l'intranet par son nom

Au labo, tu disposes des mêmes modèles en vrai : routeurs Cisco 1941, commutateurs Cisco 2960 et, pour le routage de niveau 3, commutateurs Cisco 3750. Dans Packet Tracer, choisis le 1941 et le 2960-24TT ; le 3750 n'y existe pas, on le remplace par le 3560-24PS. Packet Tracer ne sait pas faire de reverse proxy : Traefik se met en place au labo, en deuxième partie.

SIÈGE · étape 13 R1 · .252 R3 · .253 passerelle virtuelle HSRP .254 SW1 SW2 PC-COMPTAnavigateur SRV-01DNS : intranet → .20 SRV-WEB · nouveau172.16.50.20 · Fa0/18 GET / Host http://intranet.broceliande.lan https:// aussi (certificat de PT)
SRV-WEB rejoint le VLAN des serveurs ; les postes l'atteignent par son nom grâce au DNS de SRV-01.

Ce que tu ajoutes à cette étape

  • SRV-WEB dans le VLAN 50, services HTTP et HTTPS.
  • Le nom intranet.broceliande.lan dans le DNS de SRV-01.
  • Au labo : Nginx derrière un reverse proxy Traefik.
  • HTTPS partout : redirection, certificat, en-têtes.

1 Repartir de l'étape précédente

Ouvre FR-12-NOM-Prenom.pkt et enregistre-la tout de suite sous FR-13-NOM-Prenom.pkt (File → Save As).

2 Brancher et adresser SRV-WEB

Place un Server-PT nommé SRV-WEB, relie son port Fa0 au port Fa0/18 de SW1 (cuivre droit), puis, onglet Desktop → IP Configuration : 172.16.50.20, 255.255.255.0, passerelle 172.16.50.254 (adresse virtuelle HSRP), DNS 172.16.50.10.

Cisco IOS SW1 · réactiver le port du serveur
SW1(config)# interface fa0/18
SW1(config-if)# description SRV-WEB
SW1(config-if)# switchport mode access
SW1(config-if)# switchport access vlan 50 ! le port était dans le VLAN parking 998
SW1(config-if)# spanning-tree portfast
SW1(config-if)# no shutdown
SW1(config-if)# end
SW1# copy running-config startup-config

Complète les commandes de SW1 (formes abrégées acceptées), puis vérifie chaque ligne avec ✓.

SW1(config)#
SW1(config-if)#
SW1(config-if)#

3 Activer le site et déclarer le nom

  1. Sur SRV-WEB, onglet Services → HTTP : active HTTP et HTTPS, puis modifie index.html pour afficher « Intranet de Brocéliande Logistique ».
  2. Sur SRV-01, onglet Services → DNS : ajoute l'enregistrement de type A Record intranet.broceliande.lan → 172.16.50.20.
  3. Depuis PC-COMPTA : Desktop → Command Prompt, nslookup intranet.broceliande.lan, puis Web Browser : http://intranet.broceliande.lan et https://intranet.broceliande.lan.
  4. Mode Simulation, filtres DNS, TCP et HTTP : observe dans l'ordre la question DNS, la poignée de main TCP sur le port 80, puis la requête GET et la réponse.

4 Au labo : Nginx derrière Traefik

Sur la VM Debian 13 de ton pool Proxmox (page Mes serveurs et VM), tu reproduis l'intranet en vrai, avec un reverse proxy devant. Note l'adresse de ta VM : on l'appelle IP-VM ci-dessous.

ÉlémentÉcoute surRôle
Nginx127.0.0.1:8080Sert les pages de l'intranet, invisible depuis le réseau
Traefik:80 et :443Point d'entrée : redirection HTTPS, certificat, en-têtes, transmission à Nginx
Poste Windows 11–Client : fichier hosts pour résoudre intranet.broceliande.lan vers IP-VM
Debian 13 1. Nginx limité à la boucle locale
$ sudo apt install -y nginx
$ sudo mkdir -p /var/www/intranet && echo "<h1>Intranet de Brocéliande Logistique</h1>" | sudo tee /var/www/intranet/index.html
# fichier /etc/nginx/sites-available/intranet : listen 127.0.0.1:8080; server_name intranet.broceliande.lan; root /var/www/intranet;
$ sudo ln -s /etc/nginx/sites-available/intranet /etc/nginx/sites-enabled/ && sudo rm /etc/nginx/sites-enabled/default
$ sudo nginx -t && sudo systemctl reload nginx && curl -s http://127.0.0.1:8080
Debian 13 2. Installer Traefik (binaire officiel)
# sur github.com/traefik/traefik/releases, copie le lien de traefik_v3.x.y_linux_amd64.tar.gz (dernière version 3)
$ wget <lien copié> -O /tmp/traefik.tar.gz && sudo tar xzf /tmp/traefik.tar.gz -C /usr/local/bin traefik
$ sudo useradd --system --no-create-home --shell /usr/sbin/nologin traefik
$ sudo mkdir -p /etc/traefik/dynamic /etc/traefik/certs
$ traefik version
Debian 13 3. Certificat, fichiers de configuration et service
$ sudo openssl req -x509 -newkey rsa:2048 -nodes -days 365 -keyout /etc/traefik/certs/intranet.key -out /etc/traefik/certs/intranet.crt -subj "/CN=intranet.broceliande.lan" -addext "subjectAltName=DNS:intranet.broceliande.lan"
$ sudo chown -R traefik: /etc/traefik/certs
# écris /etc/traefik/traefik.yml et /etc/traefik/dynamic/intranet.yml comme en partie 6
# unité /etc/systemd/system/traefik.service : User=traefik, AmbientCapabilities=CAP_NET_BIND_SERVICE,
# ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml, Restart=on-failure
$ sudo systemctl daemon-reload && sudo systemctl enable --now traefik
$ sudo journalctl -u traefik -n 20 # aucune ligne level=error

Traefik tourne sous un compte sans privilèges : sans AmbientCapabilities=CAP_NET_BIND_SERVICE, il ne peut pas écouter sur les ports 80 et 443 (inférieurs à 1024) et le journal affiche permission denied. Ne le lance surtout pas en root pour « contourner » le problème.

  1. Résoudre le nom sur le poste Windows 11 : en administrateur, ajoute la ligne IP-VM intranet.broceliande.lan au fichier C:\Windows\System32\drivers\etc\hosts.
  2. Tester : http://intranet.broceliande.lan doit basculer en HTTPS ; accepte l'alerte une seule fois (certificat autosigné de la maquette) et observe le certificat présenté.
  3. Vérifier l'isolement : depuis le poste, http://IP-VM:8080 ne doit pas répondre.

5 Valider l'étape : le cahier de recette

N°TestCommandeRésultat attenduOK
1Le nom est résolu (PT)nslookup intranet.broceliande.lan sur PC-COMPTAAddress : 172.16.50.20
2L'intranet s'affiche (PT)Web Browser : http://intranet.broceliande.lanPage « Intranet de Brocéliande Logistique »
3Le serveur passe par HSRP (PT)tracert vers l’adresse DHCP de PC-COMPTA, depuis SRV-WEBPremier saut : 172.16.50.252 (R1 actif)
4Redirection vers HTTPS (labo)curl -I http://intranet.broceliande.lan308 (301 pour un navigateur), Location: https://…
5HTTPS et en-têtes (labo)curl -kI https://intranet.broceliande.lan200, strict-transport-security présent
6L'application n'est pas exposée (labo)curl http://IP-VM:8080 depuis le posteÉchec attendu (connexion refusée)
Suis ta progressionConnecte-toi pour marquer les ressources comme terminées et retrouver ton avancement.
Se connecter