2 votes

AWS "Cannot GET /"

Cette erreur se produit lorsque j'essaie d'accéder au chemin racine ("/") de mon application MERN. Bien que l'accès à ce chemin sur la machine locale fonctionne correctement et que j'obtienne l'application React. L'application React utilise le port 3000 mais le serveur utilise 8080. J'ai construit mon application en utilisant ce modèle : https://github.com/crsandeep/simple-react-full-stack/ (il suffit de changer les fichiers dans les répertoires "client", "server" et "public" et de changer les chemins vers le client dans "webpack.config.js")

J'ai également essayé de couvrir le composant principal de mon application avec le routeur (dans "index.js" du client) comme ceci :

<Router>
  <Route exact path="/" component={MessageBoard} />
</Router>

Mais j'obtiens toujours l'erreur. Quel est le problème ?

UPD : Le contenu de server.js est :

const express = require("express");
const logger = require("morgan");

const API_PORT = process.env.PORT || 8080;
const app = express();
const router = require('./routers/board');

app.use(logger("dev"));

app.use('/api', router);

app.listen(API_PORT, () => {
  console.log(`LISTENING ON PORT ${API_PORT}`)
});

UPD 1 : Contenu de "/etc/nginx/sites-available/default" :

server {
  listen 80;
  server_name ec2-18-222-203-253.us-east-2.compute.amazonaws.com www.ec2-18-222-203-253.us-east-2$
  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
  }
}

2voto

sebsto Points 1195

Un serveur NGnix se trouve devant votre application. Ce serveur n'est pas correctement configuré, il ne peut pas accéder à votre application. Le problème est dans la configuration de NGinx, pas dans votre application.

HTTP 404 signifie NOT_FOUND . Cette erreur est renvoyée par NGinx, pas par votre application.

$ curl -v http://ec2-18-222-203-253.us-east-2.compute.amazonaws.com/
*   Trying 18.222.203.253...
* TCP_NODELAY set
* Connected to ec2-18-222-203-253.us-east-2.compute.amazonaws.com (18.222.203.253) port 80 (#0)
> GET / HTTP/1.1
> Host: ec2-18-222-203-253.us-east-2.compute.amazonaws.com
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Server: nginx/1.10.3 (Ubuntu)
< Date: Tue, 12 Mar 2019 10:21:21 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 139
< Connection: keep-alive
< X-Powered-By: Express
< Content-Security-Policy: default-src 'self'
< X-Content-Type-Options: nosniff
<
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>
* Connection #0 to host ec2-18-222-203-253.us-east-2.compute.amazonaws.com left intact

1voto

郑旭阳 Points 61

Il semble que votre application ne prenne pas en compte le chemin '/'...

Le seul chemin que vous écoutez est le '/api' et utilisez le routeur.

Si vous voulez obtenir '/', essayez d'écouter '/'

app.get('/',(req,res)=>{
    //do something
});

ou, j'ai remarqué que dans votre rapport, il y a un app.use(express.static('dist')); Il est possible que vous deviez vérifier le chemin vers le "dist" si votre application react ou autre se trouve dans le dossier "dist".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X