108 lines
4.4 KiB
Markdown
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
|