[{"data":1,"prerenderedAt":192},["ShallowReactive",2],{"seo-verification":3,"blog-nginx-proxy-manager-vps-reverse-proxy-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-nginx-proxy-manager-vps-reverse-proxy-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":134,"ctaBody":135,"ctaButton":136,"ctaUrl":137,"relatedPosts":138},384,"nginx-proxy-manager-vps-reverse-proxy",{"fr":10,"en":12,"ar":13,"es":14},"nginx-proxy-manager-vps-reverse-proxy-setup","nginx-proxy-manager-على-vps-إعداد-reverse-proxy","nginx-proxy-manager-vps-proxy-inverso","Nginx Proxy Manager sur VPS : reverse proxy avec SSL automatique","Configurez un reverse proxy visuel sur votre VPS avec Nginx Proxy Manager : SSL Let's Encrypt automatique, routage multi-apps Docker, sans éditer nginx.conf.",9,0,false,"2026-09-26T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"Déploiement","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fnginx-proxy-manager-vps-reverse-proxy-poster.svg","Quand plusieurs applications tournent sur un même VPS, chacune écoute sur un port différent et SSL devient un casse-tête à gérer manuellement. Nginx Proxy Manager (NPM) résout ce problème avec une interface web qui automatise les certificats Let's Encrypt, route les domaines vers les bons conteneurs et ne nécessite aucune modification de fichier de configuration nginx. Ce guide couvre l'installation, la configuration des hôtes proxy et un comparatif avec Caddy et Traefik pour vous aider à choisir l'outil adapté à votre situation.",[34,38,48,51,67,82,85,88,92,131],{"type":35,"title":36,"body":37},"h2","Pourquoi un reverse proxy sur VPS","Un VPS expose une seule adresse IP publique. Si vous faites tourner trois applications Docker — une API, un front-end et un outil d'administration — chacune occupe un port différent : `3000`, `8080`, `9000`. Sans reverse proxy, vos visiteurs doivent taper le port dans l'URL, les certificats SSL doivent être gérés application par application, et ouvrir tous ces ports au public augmente la surface d'attaque.\n\nUn **reverse proxy** centralise l'entrée du trafic : il reçoit toutes les requêtes sur les ports 80 et 443, inspecte le nom de domaine ou le chemin, puis transmet la requête au bon conteneur sur le réseau interne. Les applications n'exposent plus de ports publics. Le SSL se termine au niveau du proxy, qui redistribue en HTTP simple sur le réseau Docker privé.\n\nCette architecture offre trois avantages concrets : un seul point de gestion des certificats, une isolation réseau des applications, et la possibilité d'ajouter ou de retirer une app sans toucher aux autres.",{"type":39,"title":40,"items":41},"ul","Ce que Nginx Proxy Manager simplifie",[42,43,44,45,46,47],"**Interface web** : ajout, modification et suppression d'hôtes proxy sans ligne de commande ni rechargement manuel","**SSL Let's Encrypt en un clic** : NPM demande, renouvelle et déploie les certificats automatiquement via HTTP-01 ou DNS-01","**Wildcard DNS** : un seul certificat pour `*.mondomaine.com` si votre fournisseur DNS supporte l'API Certbot","**Listes d'accès** : authentification HTTP basique ou IP whitelisting directement depuis l'interface","**Redirections et URLs personnalisées** : HTTP vers HTTPS, redirections 301\u002F302, sans modifier nginx.conf","**Rechargement sans interruption** : NPM recharge la configuration nginx en arrière-plan, sans downtime",{"type":35,"title":49,"body":50},"Prérequis","Pour suivre ce guide, vous avez besoin d'un VPS sous **Ubuntu 22.04** ou **Debian 12** avec au minimum 1 Go de RAM (2 Go recommandés si plusieurs apps tournent simultanément). Docker Engine et Docker Compose v2 doivent être installés.\n\nLes **ports 80 et 443** doivent être accessibles depuis l'extérieur. Vérifiez que votre pare-feu (`ufw` ou règles du panneau de contrôle) les autorise. Si vous utilisez un pare-feu cloud (groupe de sécurité, firewall VPS), ouvrez ces deux ports en entrée.\n\nEnfin, vous devez posséder au moins un **nom de domaine ou sous-domaine** pointant vers l'IP de votre VPS. NPM peut gérer plusieurs domaines simultanément — le prérequis minimal est qu'un enregistrement DNS A existe pour chaque domaine que vous souhaitez proxifier.",{"type":52,"title":53,"steps":54},"steps","Installer NPM avec Docker Compose",[55,58,61,64],{"title":56,"body":57},"Créer la structure de répertoires","Créez un dossier dédié et placez-vous dedans :\n\n```bash\nmkdir -p \u002Fopt\u002Fnpm && cd \u002Fopt\u002Fnpm\n```\n\nCe dossier contiendra le fichier Compose et les volumes persistants de NPM (base de données SQLite, certificats, logs).",{"title":59,"body":60},"Rédiger docker-compose.yml","Créez le fichier `\u002Fopt\u002Fnpm\u002Fdocker-compose.yml` avec le contenu suivant :\n\n```yaml\nservices:\n  app:\n    image: jc21\u002Fnginx-proxy-manager:latest\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"81:81\"\n    volumes:\n      - .\u002Fdata:\u002Fdata\n      - .\u002Fletsencrypt:\u002Fetc\u002Fletsencrypt\n\nnetworks:\n  default:\n    name: proxy-net\n    external: false\n```\n\nLe port `81` est l'interface d'administration. Le réseau `proxy-net` sera partagé avec vos autres conteneurs pour qu'ils soient joignables sans exposer de ports publics.",{"title":62,"body":63},"Démarrer NPM","Lancez le conteneur en arrière-plan :\n\n```bash\ndocker compose up -d\n```\n\nPatientez 30 à 60 secondes le temps que NPM initialise sa base de données. Vérifiez que les trois ports sont bien en écoute :\n\n```bash\nss -tlnp | grep -E ':(80|81|443)'\n```",{"title":65,"body":66},"Première connexion et changement de mot de passe","Ouvrez `http:\u002F\u002FIP_DE_VOTRE_VPS:81` dans votre navigateur. Les identifiants par défaut sont `admin@example.com` \u002F `changeme`.\n\nNPM vous force à changer l'adresse e-mail et le mot de passe à la première connexion. Utilisez une adresse valide : elle sera utilisée pour les notifications d'expiration de certificat Let's Encrypt.\n\n**Attention** : le port 81 est exposé publiquement. Configurez immédiatement une liste d'accès (voir section \"Access Lists\") ou filtrez ce port au niveau du pare-feu pour le restreindre à votre IP.",{"type":52,"title":68,"steps":69},"Ajouter un premier hôte proxy",[70,73,76,79],{"title":71,"body":72},"Créer un nouvel hôte proxy","Dans l'interface NPM, cliquez sur **Proxy Hosts** puis **Add Proxy Host**. Remplissez le champ **Domain Names** avec votre domaine, par exemple `app.mondomaine.com`. Assurez-vous que l'enregistrement DNS A de ce sous-domaine pointe déjà vers l'IP de votre VPS — Let's Encrypt vérifiera cette résolution.",{"title":74,"body":75},"Configurer la destination","Dans les champs **Forward Hostname \u002F IP** et **Forward Port**, indiquez l'hôte et le port de votre application. Si l'application tourne dans un conteneur Docker sur le même réseau `proxy-net`, utilisez le **nom du service** Docker comme hostname (exemple : `monapp` et port `3000`). Cochez **Block Common Exploits** pour activer les règles de filtrage basiques.",{"title":77,"body":78},"Activer Let's Encrypt","Passez dans l'onglet **SSL** de la même fenêtre. Dans le menu déroulant, sélectionnez **Request a new SSL Certificate**. Cochez **Force SSL** pour rediriger automatiquement HTTP vers HTTPS, et **HTTP\u002F2 Support** pour activer HTTP\u002F2. Renseignez votre adresse e-mail, acceptez les conditions Let's Encrypt, puis cliquez **Save**.\n\nNPM lance immédiatement la demande de certificat via le challenge HTTP-01. En moins d'une minute, votre domaine est accessible en HTTPS avec un certificat valide.",{"title":80,"body":81},"Vérifier le résultat","La liste des hôtes proxy affiche maintenant votre entrée avec un badge **SSL** vert. Testez depuis votre navigateur ou avec curl :\n\n```bash\ncurl -I https:\u002F\u002Fapp.mondomaine.com\n```\n\nLa réponse doit contenir `HTTP\u002F2 200` et un en-tête `server: nginx`. Le renouvellement du certificat est automatique — NPM relance la demande 30 jours avant l'expiration.",{"type":35,"title":83,"body":84},"Configurer un sous-domaine avec redirection HTTPS forcée","Forcer HTTPS n'est pas qu'une bonne pratique : c'est la base de la sécurité transport. Lors de la création ou de l'édition d'un hôte proxy, l'onglet **SSL** expose trois options complémentaires.\n\n**Force SSL** : NPM génère automatiquement un bloc `return 301 https:\u002F\u002F$host$request_uri;` dans la configuration nginx du vhost. Toute requête HTTP est redirigée côté serveur avant même d'atteindre votre application.\n\n**HSTS** (HTTP Strict Transport Security) : en cochant cette option, NPM ajoute l'en-tête `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload` aux réponses HTTPS. Le navigateur mémorise que ce domaine doit toujours être contacté en HTTPS, même si l'utilisateur tape `http:\u002F\u002F`. Activez HSTS uniquement si vous êtes certain de maintenir le SSL — désactiver HSTS après coup n'a aucun effet immédiat sur les navigateurs qui l'ont déjà mis en cache.\n\n**HTTP\u002F2 Support** : active le protocole HTTP\u002F2 côté client, sans modification côté application. Le multiplexage réduit la latence perçue, notamment sur les pages avec de nombreuses ressources.",{"type":35,"title":86,"body":87},"Cas avancé : proxy pour une app Docker sans port exposé","L'un des avantages les plus sous-estimés de NPM est la capacité de proxifier des conteneurs qui n'exposent aucun port public. La communication se fait uniquement sur le réseau Docker interne.\n\nPour qu'un conteneur soit joignable par NPM sans exposition publique, les deux services doivent partager le même réseau Docker. Exemple avec une app Node.js dans `\u002Fopt\u002Fmonapp\u002Fdocker-compose.yml` :\n\n```yaml\nservices:\n  web:\n    image: mon-image:latest\n    restart: unless-stopped\n    # Pas de section 'ports' — le conteneur n'est pas accessible depuis l'hôte\n    networks:\n      - proxy-net\n\nnetworks:\n  proxy-net:\n    external: true\n```\n\nEn déclarant `proxy-net` comme réseau externe et en rattachant le service à ce réseau, le conteneur `web` devient joignable depuis NPM par son nom de service. Dans l'interface NPM, **Forward Hostname** sera simplement `web` et **Forward Port** le port interne de l'app (par exemple `3000`).\n\nCette architecture signifie que même si un attaquant compromet un conteneur, il ne peut pas atteindre les autres services directement depuis l'extérieur — tout passe par le proxy.",{"type":89,"title":90,"body":91},"tip","Access Lists : protéger le backoffice avec une authentification","NPM permet de restreindre l'accès à certains hôtes proxy via des **listes d'accès**. Allez dans **Access Lists** puis **Add Access List**. Donnez un nom à la liste, ajoutez des entrées sous l'onglet **Authorization** (nom d'utilisateur + mot de passe hashé), et\u002Fou restreignez par IP sous **Access**.\n\nEnsuite, éditez l'hôte proxy que vous souhaitez protéger et sélectionnez cette liste dans le champ **Access List**. NPM injecte automatiquement un bloc `auth_basic` dans la configuration nginx du vhost. C'est particulièrement utile pour exposer des outils d'administration (Portainer, Grafana, interfaces d'API internes) sans déployer un serveur d'authentification complet.\n\nPour le port 81 lui-même (l'interface NPM), la protection passe par le pare-feu — restreignez l'accès à ce port à votre IP fixe ou à un VPN.",{"type":93,"title":94,"headers":95,"rows":100},"comparison","Comparatif : Nginx Proxy Manager vs Caddy vs Traefik",[96,97,98,99],"Critère","Nginx Proxy Manager","Caddy","Traefik",[101,106,111,116,121,126],[102,103,104,105],"Configuration","Interface web graphique, zéro fichier à éditer","Caddyfile déclaratif, syntaxe concise","YAML\u002FTOML ou labels Docker, courbe d'apprentissage plus longue",[107,108,109,110],"SSL automatique","Let's Encrypt HTTP-01 et DNS-01, interface graphique","Intégré nativement, HTTP-01 et DNS-01 sans plugin","ACME intégré, nécessite configuration YAML",[112,113,114,115],"Auto-découverte Docker","Non, configuration manuelle par hôte","Non natif, possible via labels avec caddy-docker-proxy","Natif via labels Docker, détecte les services au démarrage",[117,118,119,120],"Cas d'usage idéal","Développeur gérant \u003C 20 apps, préfère l'UI à la config","Stack simple à moyenne, config lisible en fichier","Microservices, Kubernetes, environnements dynamiques",[122,123,124,125],"Personnalisation avancée","Limitée — snippets nginx personnalisés possibles mais non recommandés","Élevée via modules et Caddyfile directives","Très élevée, middlewares chaînables, plugins riches",[127,128,129,130],"Ressources","~50 Mo RAM au repos","~30 Mo RAM au repos","~40 Mo RAM au repos, plus selon plugins",{"type":35,"title":132,"body":133},"Limites de NPM et quand migrer vers Traefik","NPM couvre la grande majorité des cas d'usage des développeurs qui gèrent une dizaine d'applications sur un ou deux VPS. Il commence à montrer ses limites dans plusieurs scénarios.\n\n**Configuration avancée nginx** : NPM génère ses fichiers de configuration et les régénère à chaque modification depuis l'interface. Il est techniquement possible d'ajouter des snippets personnalisés, mais ils peuvent être écrasés lors d'une mise à jour. Si vous avez besoin de configurations nginx fines — rate limiting par route, cache proxy complexe, logique de réécriture avancée — NPM devient une couche de friction plutôt qu'une aide.\n\n**Environnements dynamiques** : dans une architecture microservices où des conteneurs apparaissent et disparaissent fréquemment, la configuration manuelle de chaque hôte dans NPM devient un goulot d'étranglement. \u003Ca href=\"\u002Fblog\u002Fdeployer-avec-haproxy-vps\">HAProxy\u003C\u002Fa> ou Traefik, qui détectent automatiquement les services via les labels Docker, sont mieux adaptés à ce contexte.\n\n**Kubernetes** : NPM n'a pas de place dans un cluster Kubernetes. Traefik dispose d'un Ingress Controller natif ; `ingress-nginx` est l'autre option courante.\n\n**Règle pratique** : si votre configuration tient dans l'interface NPM et ne nécessite pas de scripts d'automatisation pour rester à jour, NPM est le bon choix. Dès que vous vous retrouvez à écrire des scripts pour interagir avec l'API NPM ou à gérer des fichiers de configuration en dehors de l'interface, c'est le signal pour évaluer \u003Ca href=\"\u002Fblog\u002Fdeployer-avec-caddy\">Caddy\u003C\u002Fa> ou Traefik selon votre contexte.","Un VPS prêt pour vos containers Docker","ServOrbit.com propose des VPS cloud à partir de 99 DH\u002Fmois, avec réseau haute disponibilité, snapshots et support technique inclus. Déployez Nginx Proxy Manager en quelques minutes.","Déployer sur VPS","\u002Fvps-cloud",[139,158,176],{"id":140,"slug":141,"slugs":142,"title":146,"excerpt":147,"readTime":148,"views":149,"isPinned":19,"publishedAt":150,"updatedAt":151,"category":152,"categories":153,"featuredImage":29,"bgImage":30,"posterImage":155,"relatedSolution":156},39,"deployer-avec-caddy",{"fr":141,"en":143,"ar":144,"es":145},"deploy-your-applications-with-caddy-on-a-vps","انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps","desplegar-con-caddy","Caddy en reverse proxy sur VPS : guide complet","Installez et configurez Caddy comme reverse proxy sur votre VPS : HTTPS automatique Let's Encrypt, multi-apps, sécurité et dépannage des erreurs courantes.",8,1,"2026-05-12T00:00:00+00:00","2026-09-25T23:43:04+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[154],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":25,"appSlug":157},"caddy",{"id":159,"slug":160,"slugs":161,"title":165,"excerpt":166,"readTime":23,"views":18,"isPinned":19,"publishedAt":167,"updatedAt":168,"category":169,"categories":170,"featuredImage":29,"bgImage":30,"posterImage":172,"relatedSolution":173},142,"deployer-avec-haproxy-vps",{"fr":160,"en":162,"ar":163,"es":164},"haproxy-on-a-vps-load-balancing-and-high-availability","haproxy-على-خادم-vps-موازنة-الأحمال-والتوافر-العالي","haproxy-en-un-vps-balanceo-de-carga","HAProxy sur VPS : load balancing et haute disponibilité","Installez HAProxy sur VPS pour répartir le trafic, surveiller les backends et préparer une architecture web plus résiliente.","2026-02-03T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[171],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-haproxy-vps-poster.svg",{"categorySlug":174,"appSlug":175},"infra","haproxy",{"id":177,"slug":178,"slugs":179,"title":183,"excerpt":184,"readTime":185,"views":18,"isPinned":19,"publishedAt":186,"updatedAt":187,"category":188,"categories":189,"featuredImage":29,"bgImage":30,"posterImage":191,"relatedSolution":29},229,"docker-compose-production-checklist",{"fr":178,"en":180,"ar":181,"es":182},"docker-compose-in-production-10-point-checklist","docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط","checklist-docker-compose-en-produccion","Docker Compose en production : checklist des 10 points","Checklist Docker Compose en production : 10 réglages essentiels, health checks, secrets sans downtime, rollback, dépannage des erreurs courantes, CVE-2026-17106.",12,"2026-08-06T00:00:00+00:00","2026-09-29T14:40:45+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[190],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",1790693222781]