Set-OPS-Public/wiki/Reverse-proxy-et-TLS.md
Daniel Allaire 2450c9ea65 observatoire : un seul nom pour la console, des deux cotes
grafana.chezlepro.internal et tableaux.genese.internal nommaient le meme
service de deux facons. Les deux deviennent observatoire.

Un nom de produit dans une URL se grave aussi dans les SAN du certificat et
dans les URI de redirection du SSO : remplacer Grafana obligerait alors a
renommer le service. Le nom dit desormais la fonction.

Le renommage a revele que les URI des clients Keycloak repetent a la main les
FQDN declares dans expose:. Rien ne les reliait. P66 garde ce lien, ecrite en
meme temps que le premier renommage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 20:21:13 -04:00

69 lines
3 KiB
Markdown

# 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.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 (`10.17.16.11`) :
```bash
curl -sI --resolve observatoire.chezlepro.internal:443:10.17.16.11 \
--cacert /etc/step/certs/root_ca.crt https://observatoire.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 10.17.16.11:443 -servername observatoire.chezlepro.internal | 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).