Ec2, Node.js: Appel API situé sur le même serveur

a marqué ce sujet comme résolu.

Bonjour,

j’ai une API express installé sur un serveur EC2. Pour certaines routes, il me faut appeler cette API depuis le serveur lui-même mais lorsque je le fait j’ai toujours une erreur :

getaddrinfo ENOTFOUND

J’ai vérifié un nombre de fois incalculable et l’adresse appelée est correcte.

Voici un example de code ou je fait ça (httpUtil est basé sur axios):

try {
  const httpUtil = require('../utils/http.util')();
  const apiStatus = await httpUtil.get(`${process.env.URL}api/status`);

  console.log(apiStatus.data);
} catch (e) {
  if (e.response) {
    console.log(e.response.data);
  } else {
    console.log(e);
  }
}

En faisant mes recherches j’ai lu que je devais ajouter des règles inbound et outbound dans le security group de mon serveur EC2. J’ai ajouté des règles contenant l’IP du serveur mais sans succès.

Est-ce que quelqu’un a déjà eu affaire à une situation similaire ?

Tu as mis quoi comme règles dans ton security group exactement ?

J’ai autorisé l’IP du serveur EC2.

Pourquoi ne pas utiliser localhost sinon pour taper directement sur l’instance locale ?

viki53

J’ai besoin de vérifier que la requête est bien appelée depuis le même serveur et pour cela je vérifie le header 'x-forwarded-for’. Le problème c’est que lorsque j’utilise localhost ce header n’existe pas.

Alors si tu autorises déjà 0.0.0.0/0 en entrée, pas besoin de préciser l’adresse de l’instance vu que tu autorises toute les IP en entrée. ;)

Ça c’est les règles du security-group de ton instance, et ton load-balancer il a quoi comme SG ?

Pour info il vaut mieux avoir un SG pour ton LB qui autorise 80+443 de partout et un SG pour ton instance qui n’autorise que son port HTTP (qui peut être custom si besoin) en entrée depuis le SG du load-balancer.

Ok. J’ai supprimé l’adresse de l’instance. C’est le même security group pour le load balancer et l’instance mais ça ne fonctionne pas :(

ufw est également installé et activé sur le serveur avec les port 80 et 443 ouverts.

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
dig api.exemple.com

; <<>> DiG 9.16.1-Ubuntu <<>> api.exemple.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 18892
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;api.exemple.com.			IN	A

;; Query time: 19 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sat Nov 20 10:13:58 UTC 2021
;; MSG SIZE  rcvd: 43

J’ai essayé de faire quelques modifications au DNS en modifiant le fichier /etc/resolv.conf manuellement seulement il est remis à défaut automatiquement.

Après ça j’ai suivi la solution sur cette page pour Ubuntu et crée le fichier /etc/netplan/99-custom-dns.yaml avec le contenu suivant :

network:
    version: 2
    ethernets:
        eth0:         
            nameservers:
                    addresses: [W.V.X.Y]
            dhcp4-overrides:
                    use-dns: false

Dans addresses, j’ai mis l’adresse de IP de l’instance, puis re-démarré mais sans succès.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte