Nginx · Redis · SSL · Lua

Vue d'ensemble
Le serveur principal agit uniquement comme orchestrateur — authentification, génération de tokens, routage CDN. Il ne touche jamais les données de flux. Les flux transitent directement de stream server via les proxys CDN vers les clients. Chaque réseau client dispose d'un CDN local pour une faible latence. Un CDN-Z public sert de secours.
Auth, tokens, orchestration. Aucune donnée de flux.
Validation du token via Redis, proxy vers stream server.
Serveurs de flux source (HLS/MPEG-TS).
Lecteur IPTV (VLC, décodeur, application mobile).
Le client s'authentifie (API B2C / lien de lecture)
Le serveur principal crée un token dans Redis (URL source, TTL 24h)
Le serveur principal redirige le client vers le meilleur CDN (302)
Le client suit la redirection vers le CDN
Le CDN valide le token via le Redis du serveur principal (réseau X)
Le CDN proxie le flux de stream server vers le client
secours
internet public
CdnRouter vérifie la santé du CDN toutes les 30s via le point de terminaison /health. Si le meilleur CDN pour le sous-réseau du client est hors service, il bascule sur le CDN correspondant suivant (trié par longueur de préfixe CIDR, le plus spécifique en premier).
Aucun CDN sain → /cdn/ local sur le serveur principal (filet de sécurité)
Format du jeton
URL de redirection
CdnToken détecte et gère automatiquement les différents formats d'URL source. Pour les chemins MPEG-TS ou de flux nus, il sonde le serveur pour la disponibilité HLS via une requête HEAD.
Playlist HLS — utilisée directement, playlist maître filtrée à une seule variante vidéo + toutes les pistes audio
MPEG-TS brut — converti automatiquement en HLS si le serveur le supporte (stream server le fait toujours), sinon proxysé brut sans mise en mémoire tampon
Fichier (mp4, m4s, ts, mkv, etc.) — proxysé directement tel quel, sans conversion
DASH (mpd) — proxysé directement tel quel
Pour les flux HLS, le filtre de corps nginx réécrit la playlist maître (index.m3u8) pour ne conserver que la première variante vidéo tout en préservant toutes les pistes audio/sous-titres. Cela empêche les lecteurs de télécharger simultanément plusieurs qualités vidéo.
Avant (depuis stream server)
Après (livré au client)
Génère des tokens hex de 32 caractères, détecte automatiquement le format (HLS/MPEG-TS/fichier), normalise l'URL, stocke dans Redis avec SETEX (TTL 24h).
Trouve le meilleur CDN sain par IP client (correspondance CIDR + vérification de santé). Chaîne de secours.
Installe automatiquement nginx + lua-resty-redis + Redis sur les serveurs CDN. Injecte la localisation /cdn/ dans le nginx principal.
Modèle DB : domaine, ip_scope (CIDR), redis_host (IP principale sur le réseau X), statut de santé.