[英]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。
這是我的項目的一些背景:我的后端和客戶端代碼在一個項目中,具有以下結構:
我通過構建反應站點來運行我的應用程序,然后運行運行良好的“節點服務器”
這是我的 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.