Elastic Beanstalk 问题:运行我的 Node.js Express 服务器时连接超时

Posted

技术标签:

【中文标题】Elastic Beanstalk 问题:运行我的 Node.js Express 服务器时连接超时【英文标题】:Elastic Beanstalk Problem: Connection timing out when running my Node.js Express server 【发布时间】: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 知道我的静态文件在哪里,我相信它会说未找到,而不是超时。

任何帮助将不胜感激

【问题讨论】:

【参考方案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 就足以解决问题。

【讨论】:

以上是关于Elastic Beanstalk 问题:运行我的 Node.js Express 服务器时连接超时的主要内容,如果未能解决你的问题,请参考以下文章

运行反向代理的 Elastic Beanstalk 上的 TLS

如何在 Elastic beanstalk 上从我的 PHP 按需运行 python 脚本?

如何解决 AWS Elastic Beanstalk Django 运行状况检查问题

在 Elastic Beanstalk 中运行 cron 作业

如何在 AWS Elastic Beanstalk 上运行 celery worker?

在 AWS Elastic Beanstalk 上运行节点和反应