Bâtir un CDN décentralisé avec des VPS européens : est-ce possible ?


Alternatives à Cloudflare pour la souveraineté numérique et la performance


❓ Pourquoi se passer de Cloudflare ?

Cloudflare est devenu un acteur central du web : protection DDoS, cache mondial, reverse proxy… Mais cette centralisation pose plusieurs problèmes :

  • Dépendance à un acteur unique
  • 🇺🇸 Hébergement et juridiction américaine
  • 🔎 Accès à toutes les requêtes web, y compris privées
  • 🧩 Verrouillage opaque du trafic (MITM HTTPS)

Alors… peut-on bâtir un CDN “souverain”, avec des outils open source et des VPS répartis en Europe ?

👉 Spoiler : oui, à condition d’accepter des compromis, et de bien comprendre l’architecture.


🧱 Objectif

Créer un CDN décentralisé, basé sur :

  • 📡 plusieurs VPS européens
  • 🌍 un DNS géographique (GeoDNS)
  • 🧰 du caching NGINX ou varnish
  • 🔁 synchronisation des assets via rsync, syncthing, git ou autre
  • 🔐 un point d’entrée TLS (certificats Let’s Encrypt ou interne)

🔧 Étape 1 – Répartition géographique

Choisis des VPS situés dans différents pays européens :

Localisation Fournisseur recommandé
🇫🇷 France D4.FR ,Scaleway, OVHcloud
🇩🇪 Allemagne Hetzner, Netcup
🇳🇱 Pays-Bas Greenhost, Tilaa
🇨🇭 Suisse Infomaniak
🇮🇸 Islande 1984 Hosting

Tu peux démarrer avec 2 ou 3 VPS.


🌐 Étape 2 – Résolution GeoDNS

Objectif : rediriger les visiteurs vers le noeud le plus proche.

Option 1 : DNS Geo IP (gratuit ou open source)

Principe : selon l’IP de l’utilisateur, le DNS répond avec l’IP du VPS le plus proche.

💡 En pratique : Configure un enregistrement A pour cdn.monsite.fr qui renvoie vers vps-fr, vps-de ou vps-nl en fonction du pays.

Option 2 : Fournisseur DNS souverain avec GeoIP intégré


📦 Étape 3 – Caching local avec NGINX

Chaque VPS agit comme un noeud CDN qui :

  • stocke les assets statiques
  • reverse proxy si besoin vers le serveur d’origine
  • met en cache localement

Exemple de configuration NGINX :

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cdn_cache:10m inactive=24h max_size=1g;

server {
    listen 80;
    server_name cdn.monsite.fr;

    location / {
        proxy_pass https://origin.monsite.fr;
        proxy_cache cdn_cache;
        proxy_cache_valid 200 1h;
        proxy_cache_use_stale error timeout updating;
        add_header X-Cache $upstream_cache_status;
    }
}

📌 On peut forcer les assets (/images, /js, /css, etc.) à rester plus longtemps via des règles expires.


🔁 Étape 4 – Synchronisation des fichiers

Si tu veux un CDN full statique, synchronise les fichiers sur tous les VPS :

Option 1 : rsync (simple et fiable)

rsync -az /var/www/assets/ user@vps-europe:/var/www/assets/

Automatisable via cron ou déclencheur git.

Option 2 : syncthing

Synchronisation en temps réel, peer-to-peer, chiffrée :

  • Interface web de contrôle
  • Détection automatique des changements
  • Convient bien aux petits CDN perso

Option 3 : git pull auto

Si tes assets sont versionnés (static-site, build/ etc.), utilise un git hook ou un CI pour les déployer sur chaque VPS.


⚠️ Étape 5 – Gestion HTTPS

Chaque noeud doit avoir un certificat SSL valide.

Options :

  • 🎯 Utiliser Certbot + Let’s Encrypt sur chaque VPS
  • 🔐 Délivrer un wildcard cert (*.cdn.monsite.fr) depuis un seul VPS, et le synchroniser
  • ⚠️ Pas de Cloudflare ou de proxy TLS, tu gères toi-même la terminaison TLS
apt install certbot python3-certbot-nginx
certbot --nginx -d cdn.monsite.fr

📊 Étape 6 – Monitoring et fallback

Ajoute un monitoring simple :

  • Uptime Kuma
  • Pingdom / Cronitor / Healthchecks
  • Script maison avec curl + grep + mail/telegram

Et un plan B :

  • Si un nœud tombe → DNS failover (changer l’enregistrement A)
  • Ou script automatique pour désactiver une entrée GeoDNS

✅ Résultat

Un utilisateur français tape cdn.monsite.fr → GeoDNS répond 51.91.x.x (Scaleway, France) → Le noeud sert les fichiers localement, en cache NGINX → Moins de latence, meilleure souveraineté, zéro GAFAM


💸 Coût estimé

Élément Nombre Coût total/mois
VPS (2 à 3 pays) 3 \~9 € à 15 €
Certificats SSL 3x gratuits via Let’s Encrypt
DNS GeoIP Open source ou service externe (\~5 €)
Total \~10 à 20 €/mois pour un CDN full souverain

🧠 Limites vs Cloudflare

Fonction Ton CDN perso Cloudflare
Mise en cache
Atténuation DDoS ⚠️ partiel (à configurer)
WAF (firewall applicatif) ❌ (à faire soi-même)
Support HTTP/3 ✅ avec NGINX récent
Géodistribution mondiale 🇪🇺 Europe uniquement 🌍 Monde entier

Mais… plus de contrôle, plus de confidentialité, moins de dépendances externes.


✊ Pourquoi c’est important

Un CDN souverain, c’est un acte de résistance douce. C’est dire : je peux améliorer la performance de mon site, sans livrer mes visiteurs à un géant du web américain.

Pour les projets associatifs, médias indépendants, plateformes locales… cette approche est non seulement possible, mais cohérente avec les valeurs d’un internet libre et décentralisé.


🧰 Bonus : outils alternatifs à explorer

  • 🐘 PeeringDB : pour comprendre les réseaux
  • 🌀 LibreCDN : un projet de CDN libre
  • 🚅 Varnish Cache : un cache HTTP avancé
  • 🛰️ IPFS : pour un CDN vraiment décentralisé (à la blockchain)