Eywek / tgvmax-bot

26 stars 6 forks source link

"GET /api/travels HTTP/1.1" 404 555 "http://example.com:8081/" #33

Closed JulianSchl closed 1 year ago

JulianSchl commented 1 year ago

Salut,

j'ai un problème pareil que dans cet issue, mais j'arrive pas à le resoudre :/

le log pour le backend est:

0 travel(s) initiated.
0 cron(s) initiated.
App listen on 0.0.0.0:8080

et pour le frontend:

172.17.0.1 - - [01/Feb/2023:01:01:53 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" "-"
2023/02/01 01:01:53 [error] 25#25: *1 open() "/usr/share/nginx/html/api/travels" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /api/travels HTTP/1.1", host: "example.com:8081", referrer: "http://example.com:8081/"
172.17.0.1 - - [01/Feb/2023:01:01:53 +0000] "GET /api/travels HTTP/1.1" 404 555 "http://example.com:8081/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" "-"

j'ai utilisé ipconfig dans les containers pour trouver l'adresse IP ... Et oui, j'ai relancé nginx

Mon nginx est configuré de cette manière:

upstream frontend {
    server 172.17.0.2:8081;
}

upstream backend {
    server 172.17.0.3:8080;
}

server {
    listen 80;
    listen [::]:80;

    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location / {
            include proxy_params;
            proxy_pass http://frontend;
        }

        location /api {
        include proxy_params;
        #proxy_buffering off;
        proxy_pass http://backend;
    }
}

Si tu avais une idée, ce serait vraiment super :) Pour plusieurs informations n'hésite pas à me demander

vmarchaud commented 1 year ago

tu devrais pas utiliser les IPs dans ta config nginx, si tu utilises docker (et la range d'ip me dit que c'est le cas), tu devrais utiliser les noms des containers. Tu as un exemple dans le readme https://github.com/Eywek/tgvmax-bot#reverse-proxy

JulianSchl commented 1 year ago

Oui mon setup est comme décrit dans le readme. J'ai téléchargé les deux docker et j'ai lancé le server nginx (pas dans un docker - si j'ai bien compris). Je suis perdu, qu-est ce que tu veux dire avec "nom des containers"? Dans le readme t'as envoye, je vois que des adresses IP et pas des noms. Par contre, j'ai regarde à ce guide et ils le font presque pareil que moi, mais j'obtiens quand-même l'erreur 404. Ce que je ne comprends pas est, pourquoi ça marche avec le frontend et pas avec le backend ...

vmarchaud commented 1 year ago

Je pensais que tu lançais nginx dans docker vu que tu mettais des ips de container (172.17..), si ton nginx est en dehors de docker tu peux juste laisser 127.0.0.1 comme ip pour les deux. Quand tu lances le container du backend est-ce que tu peux y accéder en dehors de nginx ? En faisant un curl par exemple ?

JulianSchl commented 1 year ago

Je pensais que tu lançais nginx dans docker vu que tu mettais des ips de container (172.17..)

ah non j'ai premièrement regardé sur ifconfig dans chaque docker (nginx est dehors docker), mais je crois cette idée n'était pas la meilleure ...

alors si je lance ip a j'obtiens:

...
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c4:64:d5:4e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:c4ff:fe64:d54e/64 scope link 
       valid_lft forever preferred_lft forever
...

seulement le backend docker est actif:

CONTAINER ID   IMAGE                                                                       COMMAND                  CREATED        STATUS       PORTS                                       NAMES
0797c2e6e0e6   ghcr.io/eywek/tgvmax-bot-backend:9ad9ed6d6aca0b98b045a75f4c6420c1f9817af4   "docker-entrypoint.s…"   22 hours ago   Up 3 hours   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tgvmax-backend

En faisant un curl par exemple ?

donc je lance curl 172.17.0.1:8080:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>

c'est un erreur de nginx?

vmarchaud commented 1 year ago

Utilises pas 172.17.0.1, de base avec les commandes du readme docker va forward les ports du backend et les rendre accessible sur localhost (127.0.0.1) donc tu devrais pouvoir utiliser la même config nginx que dans le readme.

JulianSchl commented 1 year ago

D'accord avec curl 127.0.0.1:8081 j'arrive à voir le frontend, mais curl 127.0.0.1:8080 rend encore

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>
JulianSchl commented 1 year ago

pareil avec 127.0.0.1:8080/api

JulianSchl commented 1 year ago

Je peux pas dire pourquoi, mais curl va jamais marcher. Par contre je suis juste venu sur la domaine encore une fois et maintenant ça marche! Merci :smile: