# Fix Erreur 502 - Headers trop grands (Nginx) ## 🔍 Problème Identifié **Erreur Nginx** : ``` upstream sent too big header while reading response header from upstream ``` **Cause** : Le cookie de session NextAuth est trop grand (> 4KB par défaut dans Nginx). Le JWT contient : - `accessToken` (Keycloak) - ~1-2KB - `refreshToken` (Keycloak) - ~1-2KB - `idToken` (Keycloak) - ~1-2KB - Données utilisateur (roles, etc.) - ~500B-1KB - **Total** : ~4-7KB, ce qui dépasse la limite Nginx par défaut ## ✅ Solutions ### Solution 1 : Augmenter la limite Nginx (RECOMMANDÉ) **Fichier** : Configuration Nginx (généralement `/etc/nginx/sites-available/hub.slm-lab.net` ou similaire) **Ajouter dans le bloc `server` ou `location`** : ```nginx server { # ... autres configs ... # Augmenter la taille maximale des headers proxy_buffer_size 16k; proxy_buffers 8 16k; proxy_busy_buffers_size 32k; large_client_header_buffers 4 32k; # Spécifiquement pour les headers de réponse proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128; # ... reste de la config ... } ``` **OU** pour une solution plus simple, ajouter seulement : ```nginx server { # ... autres configs ... # Augmenter la limite des headers large_client_header_buffers 4 32k; # ... reste de la config ... } ``` **Puis redémarrer Nginx** : ```bash sudo nginx -t # Vérifier la config sudo systemctl reload nginx # Ou sudo service nginx reload ``` ### Solution 2 : Réduire la taille du JWT (ALTERNATIVE) Si on ne peut pas modifier Nginx, on peut réduire la taille du JWT en ne stockant pas tous les tokens. **Modification** : `app/api/auth/options.ts` **Option A** : Ne pas stocker `idToken` dans le JWT (si pas nécessaire) ```typescript // Dans JWT callback token.idToken = account.id_token ?? ''; // ❌ Supprimer cette ligne ``` **Option B** : Stocker seulement les tokens nécessaires ```typescript // Stocker seulement accessToken et refreshToken // idToken peut être récupéré depuis Keycloak si nécessaire ``` **Note** : Cette solution réduit la fonctionnalité. La Solution 1 est préférable. ## 🔧 Configuration Nginx Complète Recommandée ```nginx server { listen 443 ssl http2; server_name hub.slm-lab.net; # ... SSL config ... # Augmenter les limites pour les gros headers NextAuth proxy_buffer_size 16k; proxy_buffers 8 16k; proxy_busy_buffers_size 32k; large_client_header_buffers 4 32k; # Timeouts proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; location / { proxy_pass http://172.16.0.102:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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; proxy_cache_bypass $http_upgrade; # Headers pour NextAuth proxy_set_header Cookie $http_cookie; } } ``` ## 📊 Vérification **Après modification Nginx** : 1. **Tester la config** : ```bash sudo nginx -t ``` 2. **Recharger Nginx** : ```bash sudo systemctl reload nginx ``` 3. **Tester la connexion** : - Se connecter via Keycloak - Vérifier que l'erreur 502 ne se produit plus - Vérifier les logs Nginx pour confirmer ## 🎯 Cause Technique NextAuth crée un cookie JWT qui contient : - Le JWT encrypté avec `NEXTAUTH_SECRET` - Le JWT contient tous les tokens Keycloak - La taille totale peut dépasser 4KB Nginx a une limite par défaut de 4KB pour les headers de réponse. Quand Next.js essaie de renvoyer un cookie > 4KB, Nginx rejette avec "upstream sent too big header". ## ✅ Solution Immédiate **Action** : Modifier la configuration Nginx pour augmenter `large_client_header_buffers` à au moins `4 32k` ou `8 16k`. **Impact** : Résout immédiatement l'erreur 502. --- **Document créé le** : $(date) **Priorité** : HAUTE - C'est la cause de l'erreur 502