# Reverse-proxy & TLS > **Unité d'apprentissage.** Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer. --- ## ① Le concept *(générique)* Un **reverse-proxy** est un **point d'entrée unique** devant plusieurs services. Il : - **route par nom** (`grafana.…` → tel backend, `forge.…` → tel autre) — via l'en-tête `Host` / **SNI** ; - **termine le TLS** : il porte les certificats, parle HTTPS au client et (souvent) HTTP en interne ; - centralise journaux, limites de débit, en-têtes de sécurité (et un **WAF** éventuel). **Terminaison TLS** = le chiffrement s'arrête au proxy ; derrière, le réseau interne est de confiance. Un seul endroit gère les certificats → simple et cohérent. --- ## ② Comment Set-OPS le fait `serveur_nginx` déployé sur l'**edge** (`infra-edge`) est le reverse-proxy. Le point élégant : l'**exposition est auto-dérivée**. Déclarer `expose: [icinga.lab.chezlepro.internal]` sur une app génère **tout** : ``` expose ──> vhost nginx (route par nom) ──> SAN ajouté au certificat de l'edge (step-ca) ──> enregistrement A dans PowerDNS ──> alias plancher /etc/hosts ``` Le client parle **HTTPS vérifié** à l'edge ; l'edge relaie en **HTTP** au backend interne (Grafana, Forgejo, Keycloak…). Une seule ligne déclarative, toute la chaîne câblée. C'est une **liaison** (*app → domaine*) — voir l'unité *Liaisons*. --- ## ③ Pourquoi c'est transférable | Set-OPS | Équivalents ailleurs | |---|---| | nginx reverse-proxy | HAProxy · Traefik · Caddy · Apache · Envoy | | edge + terminaison TLS | tout load-balancer / ingress cloud, un NetScaler ADC | | routage par SNI/Host | mécanisme **standard** de tout proxy HTTP | Tu as appris **le reverse-proxy, le routage par nom, la terminaison TLS** — pas « nginx ». --- ## ④ À toi de jouer 1. **Route par nom.** Deux noms, un seul edge (`192.168.15.21`) : ```bash curl -sI --resolve grafana.lab.chezlepro.internal:443:192.168.15.21 \ --cacert /etc/step/certs/root_ca.crt https://grafana.lab.chezlepro.internal/ | head -1 ``` Change `grafana` en `forge` : même IP, **backend différent**. C'est le routage par SNI. 2. **Vois la terminaison TLS.** Le certificat présenté est celui de l'**edge** (avec les SAN des exposés) : `openssl s_client -connect 192.168.15.21:443 -servername grafana.lab… | openssl x509 -noout -text | grep -A1 'Subject Alternative'`. 3. **Casse & répare.** Arrête le backend (ex. `systemctl stop grafana-server` sur obs-01) et rouvre Grafana : l'edge répond **502 Bad Gateway** (le proxy est là, le service non). Redémarre : ça remarche. Tu distingues **le proxy** de **ce qu'il sert**. --- ## Pour aller plus loin *(dépôt)* - Rôle : `roles/serveur_nginx` ; les sites se déclarent côté nginx (`serveur_nginx_sites`). - Machinerie d'exposition : `expositions_des_applications` (dérive vhost + SAN + A + plancher). - Frontière **publique** (au-delà de l'edge interne) : `docs/` + Étape B (OPNsense).