簡體   English   中英

Elastic Beanstalk 問題:運行我的 Node.js Express 服務器時連接超時

[英]Elastic Beanstalk Problem: Connection timing out when running my Node.js Express server

我正在嘗試在 Elastic Beanstalk 上部署我的 MERN 應用程序,但我似乎遇到了一個我無法解決的最終問題。

我的應用程序在本地運行我的服務器(運行節點服務器)時運行良好,但是在彈性 beantalk 上運行時,頁面永遠不會加載。

經檢查,未加載靜態元素,如 Dev Tools 中所示:

顯示開發工具中 ERR_CONNECTION_TIMED_OUT 的圖像

我檢查了所有 EB 日志,沒有發現任何錯誤或有用的消息。 我認為問題在於 EB 無法以某種方式找到我的靜態文件。 但是,我的構建文件應該不會被 git 忽略並部署到 EB。

這是我的項目的一些背景:我的后端和客戶端代碼在一個項目中,具有以下結構:

  • 項目
    • 服務器.js
    • 前端
      • 建造
        • 靜止的
        • 索引.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 知道我的靜態文件在哪里,我相信它會說沒有找到,而不是超時。

任何幫助,將不勝感激

解決了。

問題在於在我的快速服務器中使用 Helmet。 我省略了代碼,認為它不相關,但這里是 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 足以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM