# Reverse proxy — préfixe `/api/` sur les vhosts `*.enso.*` Sur **test**, **pprod** et **prod**, le vhost public **enso** (ex. `test.enso.4nkweb.com`) doit envoyer **`location /api/`** vers **enso-front** (**port 3032**), pas vers **enso-back** (**3040**). ## Pourquoi - **enso-front** (Next.js) expose des Route Handlers sous **`/api/`**, notamment **`POST /api/auth/docv-token`** pour l’échange du code OAuth. - **enso-back** sur **3040** est pour l’instant un accepteur TCP minimal qui répond **`ok`** (texte brut) à **toute** requête. Si nginx route **`/api/`** vers **3040**, le navigateur reçoit **`ok`** au lieu de JSON → échec du parse côté client et écran bloqué sur « Connexion en cours… » après le retour OAuth. ## Référence dépôt Fichiers snippets : **`deploy/nginx/test.enso.4nkweb.com.locations.snippet`**, **`pprod.enso…`**, **`prod.enso…`** — blocs **`location /api/`** avec **`proxy_pass`** vers **3032** sur la machine cible (**101** / **102** / **103**). Après modification du proxy (**192.168.1.100**), recharger nginx et contrôler : ```bash curl -sS -D- -o /tmp/b.txt -X POST "https://test.enso.4nkweb.com/api/auth/docv-token" \ -H "Content-Type: application/json" \ -d '{"code":"x","redirect_uri":"https://test.enso.4nkweb.com/auth/docv-callback"}' head -1 /tmp/b.txt # Attendu : Content-Type JSON (erreur 400/500 avec corps JSON), pas text/plain « ok ». ``` ## Variables Next sur l’hôte applicatif Sur la machine qui exécute **`next start`** (3032), **`enso/enso-front/.env.production.local`** doit contenir au minimum **`DOCV_OAUTH_TOKEN_URL`**, **`DOCV_OAUTH_CLIENT_ID`**, **`DOCV_OAUTH_CLIENT_SECRET`** (alignés sur **docv-back**). Les seules clés **`VITE_*`** ne suffisent pas. ## Évolution : enso-back (3040) quand il expose une vraie API Le périmètre produit est documenté dans **[docs/enso/README.md](../enso/README.md) §4.1** : le **socle** métier commun vit dans **docv-back** (**`/docv-api/`** → **3038**) ; **enso-back** (**3040**) porte le **spécifique cabinet** (zone 17, agrégats enso, intégrations serveur réservées au projet). Quand **enso-back** servira des routes HTTP réelles, ne **pas** reprendre le préfixe **`/api/`** en entier vers **3032** pour tout le trafic métier enso : ajouter un bloc **plus spécifique** **avant** le `location /api/` générique, par exemple : ```nginx # Exemple (à ajuster selon les chemins réels choisis pour enso-back) location /api/enso/ { proxy_pass http://192.168.1.101:3040; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /api/ { proxy_pass http://192.168.1.101:3032; # … (Next.js : /api/auth/docv-token et autres Route Handlers) } ``` Le navigateur et **enso-front** continuent d’appeler **docv** pour les fonctionnalités communes via **`/docv-api/`** ; seules les routes **dédiées enso** passent par **`/api/enso/`** (ou le préfixe retenu dans le contrat d’API).