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 作业