【问题标题】:Cannot get '/' route and 500 internal server error deploying MERN to AWS EC2将 MERN 部署到 AWS EC2 时无法获取“/”路由和 500 内部服务器错误
【发布时间】:2021-07-15 22:44:29
【问题描述】:

我是一名 AWS 初学者,并尝试将 MERN 应用程序部署到 AWS EC2 实例。我之前已经在 Heroku 上成功部署了它,现在正在迁移到 AWS。

我按照步骤指向我的 DNS 并成功设置了 Nginx、SSL 和 pm2。当我进入我的域时,返回 500 错误。

错误信息是:

Error: Can't find / on this server!
    at /home/ubuntu/cloud_v2/app.js:49:9

当找不到路由时,这是我在 Node 中的错误消息。但是,“路由”只是主页的/,并且肯定在服务器上。

Nginx 正在运行,这些是日志:

2021/04/21 11:18:06 [notice] 28925#28925: signal process started
2021/04/21 11:30:53 [error] 28929#28929: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 54.221.27.173, server: arriveanywhere.xyz, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "arriveanywhere.xyz"
2021/04/21 11:54:07 [notice] 29971#29971: signal process started
2021/04/21 16:41:15 [notice] 31724#31724: signal process started
2021/04/21 16:41:19 [notice] 31726#31726: signal process started
2021/04/21 16:41:22 [notice] 31728#31728: signal process started
2021/04/21 16:42:03 [notice] 31730#31730: signal process started
2021/04/21 16:42:49 [notice] 31735#31735: signal process started
2021/04/21 16:45:49 [notice] 31756#31756: signal process started

今天早上失败了一次,但从那以后一直显示“信号过程开始”。

我的端口是:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -
tcp        0      0 172.31.11.76:54132      3.232.124.90:27017      ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:54128      3.232.124.90:27017      ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:40442      3.224.254.52:27017      ESTABLISHED 29944/server.js
tcp        0    604 172.31.11.76:22         69.249.187.35:50408     ESTABLISHED -
tcp        0      0 172.31.11.76:54124      3.232.124.90:27017      ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:58498      34.197.51.246:27017     ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:40428      3.224.254.52:27017      ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:54138      3.232.124.90:27017      ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:54126      3.232.124.90:27017      ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:58484      34.197.51.246:27017     ESTABLISHED 29944/server.js
tcp        0      0 172.31.11.76:54130      3.232.124.90:27017      ESTABLISHED 29944/server.js
tcp6       0      0 :::8080                 :::*                    LISTEN      29944/server.js
tcp6       0      0 :::22                   :::*                    LISTEN      -

8080是节点监听的,也是Nginx配置监听的。

如果我从邮递员那里拨打http://127.0.0.1:8080/,它可以工作。

我正在从我的 React 文件夹中的构建文件中提供我的页面

if(process.env.NODE_ENV === "production") {
   app.use(express.static(path.join(__dirname, 'react/build')));
   app.get('*', (req, res) => {
      res.sendFile(path.join(__dirname+'/react/build/index.html'));
   }); 
}

如果有人能帮我解决这个问题,我将不胜感激!也很乐意提供更多信息。谢谢。

【问题讨论】:

    标签: node.js reactjs amazon-web-services nginx


    【解决方案1】:

    我没有将我的静态文件正确地定向到 Node.js。我有:

    if (process.env.NODE_ENV === "production") {
       app.use(express.static(path.join(__dirname, 'react/build')));
       app.get('*', (req, res) =>{
          res.sendFile(path.join(__dirname+'/react/build/index.html'));
       });
    }
    

    这没有被阅读。我把它改成了(process.env.NODE_ENV !== "development")

    【讨论】:

      【解决方案2】:

      我猜您的问题与 AWS 无关,而与您的服务器和查找要显示的文件有关。我想如果您在新服务器中而不是 AWS 中,您可能会遇到相同的错误。错误 500 是常见的 Web 服务器错误。首先,您需要确定问题是与您的服务器有关还是与 AWS 有关。用一个简单的 html 文件或类似的东西。 --- 最常见的原因之一是将服务器文件路径重定向到所需路径或访问文件。如果有,您应该专注于操作系统和 Web 服务器中的 .htaccess 文件来查找重定向问题。最简单的解决方案是重命名您网站的 .htaccess 文件并查看错误是否已解决。我遇到了同样的错误,但是对于 Apache2,我没有足够的关于 Nginx 的信息。

      这里有一些关于我的意思的更多解释: A:Internal server error B:Internal server error

      【讨论】:

      • 你的意思是问题似乎是服务器如何读取静态文件?我更新了这个问题以显示我是如何得到它们的。或者 AWS 上的服务器如何与域/DNS 通信?我不认为我的设置 .htaccess 文件。
      • 我的意思是服务器由于不清楚的问题找不到文件,如果有帮助,我会尝试更正我的答案
      猜你喜欢
      • 2022-12-01
      • 2019-07-19
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2018-11-15
      相关资源
      最近更新 更多