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

4.4 KiB

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 :

    # Depuis le serveur
    nslookup void.cat
    # ou
    dig void.cat
    # ou
    host void.cat
    
  2. Vérifier la connectivité réseau :

    # 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 :

    # Vérifier les serveurs DNS configurés
    cat /etc/resolv.conf
    # ou sur systemd
    systemd-resolve --status
    
  5. Tester depuis le conteneur/service :

    # 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