story-research-zapwall/fixKnowledge/nip95-upload-dns-resolution-error.md

108 lines
4.4 KiB
Markdown

# Problème : Erreur DNS resolution pour NIP-95 upload
## Date
2025-01-27
## Problème
L'API NIP-95 upload retourne une erreur `getaddrinfo ENOTFOUND void.cat` lors des tentatives d'upload, indiquant que le serveur Node.js ne peut pas résoudre le nom de domaine.
## Symptômes
- Erreur : `Failed to upload to all endpoints: {"error":"Failed to connect to upload endpoint: getaddrinfo ENOTFOUND void.cat"}`
- Code d'erreur Node.js : `ENOTFOUND` ou `EAI_AGAIN`
- Les uploads NIP-95 échouent avec une erreur de résolution DNS
## Root cause
Le serveur Node.js qui exécute l'API Next.js ne peut pas résoudre le nom de domaine `void.cat` (ou d'autres endpoints NIP-95). Cela peut être dû à :
1. **Problème de DNS sur le serveur** : Le serveur n'a pas accès à un serveur DNS fonctionnel
2. **Pas d'accès Internet** : Le serveur n'a pas de connexion Internet ou est derrière un pare-feu qui bloque les requêtes sortantes
3. **Configuration réseau incorrecte** : Les paramètres réseau du serveur sont mal configurés
4. **Problème de résolution DNS temporaire** : Problème temporaire avec le serveur DNS
## Impact
- Impossible d'uploader des fichiers via NIP-95
- Les utilisateurs ne peuvent pas publier d'articles avec des médias
- Fonctionnalité d'upload complètement non fonctionnelle
## Correctifs
1. **Amélioration de la gestion d'erreur DNS** : Détection spécifique des erreurs DNS avec messages d'erreur plus clairs
2. **Ajout d'un timeout** : Timeout de 30 secondes pour éviter que les requêtes restent bloquées indéfiniment
3. **Amélioration des logs** : Logs plus détaillés pour diagnostiquer les problèmes DNS
## Modifications
- **Fichier modifié** : `pages/api/nip95-upload.ts`
- **Ajout de timeout** : `timeout: 30000` dans les options de requête
- **Détection spécifique des erreurs DNS** : Vérification des codes d'erreur `ENOTFOUND` et `EAI_AGAIN`
- **Messages d'erreur améliorés** : Messages plus clairs pour les erreurs DNS avec suggestions de diagnostic
- **Logs améliorés** : Logs incluant le hostname, le code d'erreur et des suggestions
## Modalités de déploiement
1. Les modifications sont dans le code source
2. Rebuild de l'application : `npm run build`
3. Redémarrage du service Next.js
4. Aucune dépendance supplémentaire nécessaire
## Modalités d'analyse
Pour diagnostiquer le problème DNS :
1. **Vérifier la résolution DNS depuis le serveur** :
```bash
# Depuis le serveur
nslookup void.cat
# ou
dig void.cat
# ou
host void.cat
```
2. **Vérifier la connectivité réseau** :
```bash
# Tester la connexion HTTPS
curl -v https://void.cat/upload
# ou
wget --spider https://void.cat/upload
```
3. **Vérifier les logs du serveur Node.js** :
- Chercher les erreurs `ENOTFOUND` ou `EAI_AGAIN`
- Vérifier les logs avec le hostname et les suggestions
4. **Vérifier la configuration DNS du serveur** :
```bash
# Vérifier les serveurs DNS configurés
cat /etc/resolv.conf
# ou sur systemd
systemd-resolve --status
```
5. **Tester depuis le conteneur/service** :
```bash
# Si le service tourne dans un conteneur Docker
docker exec <container_name> nslookup void.cat
docker exec <container_name> curl -v https://void.cat/upload
```
## Solutions possibles
### Si le problème est la résolution DNS
1. Vérifier que le serveur a accès à un serveur DNS fonctionnel
2. Configurer des serveurs DNS fiables (par exemple 8.8.8.8, 1.1.1.1)
3. Vérifier que `/etc/resolv.conf` contient des serveurs DNS valides
### Si le problème est l'accès Internet
1. Vérifier que le serveur a une connexion Internet fonctionnelle
2. Vérifier les règles de pare-feu qui pourraient bloquer les requêtes sortantes HTTPS
3. Vérifier les proxies si le serveur est derrière un proxy
### Si le problème est temporaire
1. Attendre quelques minutes et réessayer
2. Vérifier si d'autres services ont des problèmes de connectivité
3. Vérifier les statuts des endpoints NIP-95 (void.cat, etc.)
## Notes
- L'erreur `ENOTFOUND` signifie que le nom de domaine n'a pas pu être résolu en adresse IP
- L'erreur `EAI_AGAIN` signifie que la résolution DNS a échoué temporairement (peut être réessayé)
- Le timeout de 30 secondes évite que les requêtes restent bloquées indéfiniment
- Les messages d'erreur améliorés aident à diagnostiquer rapidement le problème
- Si le problème persiste, vérifier la configuration réseau du serveur et l'accès à Internet