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
69 lines
3 KiB
Markdown
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).
|