docs: whitelist Bifrost double-couche (redaction-pro), bug prefixe nginx /api/, dualite catalogues opencode/opencode-go, fix model_override deprecie hermes-perso
This commit is contained in:
@@ -78,3 +78,40 @@ Lors de la mise en place ou modification d'un reverse proxy Nginx :
|
||||
1. Valider la syntaxe : `docker exec <proxy> nginx -t`
|
||||
2. Recharger la config : `docker exec <proxy> nginx -s reload`
|
||||
3. **Test d'attribution dynamique** : Redémarrer le conteneur backend (`docker restart <backend>`) et vérifier avec `curl` l'accès via le proxy **sans toucher au conteneur proxy**.
|
||||
|
||||
## Piege additionnel confirme (02/09/2026) — le prefixe de location n'est PAS tronque avec proxy_pass + variable
|
||||
|
||||
**Symptome** : sur redaction-pro, TOUS les appels API echouaient en 405 Method Not Allowed depuis le navigateur, quel que soit le modele choisi — alors que les memes appels fonctionnaient parfaitement en tapant directement l'URL de Bifrost. Aucun rapport avec la whitelist de modeles (voir common/bifrost-vk-incidents.md, incident du meme jour).
|
||||
|
||||
**Cause** : le pattern documente plus haut (`set $upstream ...; proxy_pass $upstream;`) resout bien le probleme de cache DNS, MAIS il a un effet de bord non documente jusqu'ici : quand `proxy_pass` cible une **variable**, nginx ne tronque plus jamais le prefixe du `location` — il transmet l'URI ORIGINALE complete au backend, contrairement a un `proxy_pass` avec une URI litterale qui tronque automatiquement le prefixe du `location` matche.
|
||||
|
||||
Concretement sur redaction-pro :
|
||||
```nginx
|
||||
location /api/ {
|
||||
set $bifrost_upstream http://bifrost:8080;
|
||||
proxy_pass $bifrost_upstream/; # BUG : le "/" final est ignore avec une variable
|
||||
}
|
||||
```
|
||||
Une requete navigateur vers `/api/v1/chat/completions` etait transmise a Bifrost telle quelle, soit `/api/v1/chat/completions` — un chemin que Bifrost ne reconnait pas comme route API (son router de secours sert alors sa propre page de dashboard en GET, et renvoie 405 sur tout le reste).
|
||||
|
||||
**Fix** : ajouter un `rewrite` explicite AVANT le `proxy_pass`, pour forcer la troncature que la variable empeche :
|
||||
```nginx
|
||||
location /api/ {
|
||||
set $bifrost_upstream http://bifrost:8080;
|
||||
rewrite ^/api/(.*)$ /$1 break;
|
||||
proxy_pass $bifrost_upstream; # sans "/" final, inutile desormais
|
||||
}
|
||||
```
|
||||
Valider avec `docker exec <proxy> nginx -t` puis `nginx -s reload` (pas besoin de redemarrer le conteneur).
|
||||
|
||||
**Regle generale** : des qu'un `location` a un PREFIXE non-racine (`/api/`, `/mcp/`, etc.) ET que le `proxy_pass` cible une variable (pattern DNS dynamique ci-dessus), un `rewrite ... break;` de troncature est **obligatoire**, sinon le backend recoit un chemin errone en silence (pas d'erreur nginx, juste un mauvais routage cote backend).
|
||||
|
||||
**A verifier** (non fait le 02/09, hors perimetre de la tache du jour) : `baserow-schema-mcp/nginx.conf` utilise `location /mcp/ { proxy_pass $mcp_upstream; }` — meme pattern a risque, jamais audite sous cet angle precis. A verifier si le backend MCP attend un chemin sans prefixe avant de considerer que c'est fonctionnel par coincidence ou reellement correct.
|
||||
|
||||
## Tableau perimetre — mise a jour
|
||||
|
||||
| Service Proxy | Statut prefixe non-racine |
|
||||
|---|---|
|
||||
| `redaction-pro` (`/api/`) | ✅ Bug trouve et corrige le 02/09/2026 (rewrite ajoute) |
|
||||
| `baserow-schema-mcp` (`/mcp/`) | ⚠️ A verifier — meme pattern a risque, non audite |
|
||||
| `baserow-oauth-proxy` | OK — utilise `$upstream$request_uri` (chemin complet volontaire), pas concerne |
|
||||
|
||||
Reference in New Issue
Block a user