【问题标题】:Elastic Beanstalk Problem: Connection timing out when running my Node.js Express serverElastic Beanstalk 问题:运行我的 Node.js Express 服务器时连接超时
【发布时间】:2020-12-28 10:06:43
【问题描述】:

我正在尝试在 Elastic Beanstalk 上部署我的 MERN 应用程序,但我似乎遇到了一个我无法解决的最后一个问题。

在本地运行我的服务器(运行节点服务器)时,我的应用运行良好,但在弹性 beanstalk 上运行时,页面永远不会加载。

经检查,未加载静态元素,如开发工具中所示:

Image showing ERR_CONNECTION_TIMED_OUT in dev tools

我检查了所有 EB 日志,没有发现任何错误或有用的消息。 我认为问题在于 EB 无法以某种方式找到我的静态文件。但是,我的构建文件应该不会被 git 忽略并部署到 EB。

以下是关于我的项目的一些背景信息: 我的后端和客户端代码在一个项目中,结构如下:

  • 项目
    • server.js
    • 前端
      • 构建
        • 静态
        • index.html

我通过构建反应站点来运行我的应用程序,然后运行运行良好的“节点服务器”

这是我 server.js 中的相关代码:

const port = process.env.PORT || 8081;

app.use(express.static(path.join(__dirname, 'frontend/build')));

app.get('/*', function (req, res) {
    res.sendFile(path.join(__dirname, 'frontend/build/index.html'));
});

app.listen(port, () => {
    console.log(`Server is running on port: ${port}`);
});

服务器正在成功发送服务器正在运行且数据库已建立连接的日志。所以看起来服务器没问题,只是前端有问题。

eb 配置文件:

option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeCommand: "npm start"
  aws:elasticbeanstalk:application:environment:
    PORT: 8081
    NODE_ENV: production
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    /static: /frontend/build/static

我不知道如何解决这个问题。 EB 是通过 CLI 部署的,我没有弄乱任何设置。我让 EB 知道我的静态文件在哪里,我相信它会说未找到,而不是超时。

任何帮助将不胜感激

【问题讨论】:

    标签: node.js reactjs amazon-web-services express amazon-elastic-beanstalk


    【解决方案1】:

    解决了。

    问题在于在我的快递服务器中使用头盔。我省略了代码,认为它不相关,但这里是 server.js 的顶部,最后一行是相关部分:

    const AWS = require('aws-sdk');
    const cors = require('cors');
    const express = require('express');
    const helmet = require('helmet');
    const mongoose = require('mongoose');
    const path = require('path');
    let Download = require('./models/Download.js');
    
    require('dotenv').config();
    
    const app = express();
    const port = process.env.PORT || 8081;
    
    app.use(helmet());
    

    不使用头盔可以解决问题。

    说实话,我不确定为什么会出现这个问题。 我认为问题在于头盔提供了一些我的基本 EB 根本无法提供的安全性。

    编辑:具体来说,问题出在 CSP 上。在 Helmet 中将 contentSecurityPolicy 设置为 false 就足以解决问题。

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 2015-07-01
      • 2015-07-18
      • 2021-09-22
      • 2014-08-10
      • 2015-04-17
      • 2016-04-23
      • 1970-01-01
      相关资源
      最近更新 更多