EC2 花费太长时间/拒绝连接

编程入门 行业动态 更新时间:2024-09-27 17:38:03

EC2 花费<a href=https://www.elefans.com/category/jswz/34/1756068.html style=太长时间/拒绝连接"/>

EC2 花费太长时间/拒绝连接

大家下午好

我来这里是为了就特定事项请求帮助。我在尝试在 AWS EC2 上托管测试项目时遇到了困难。我遵循了教程中推荐的所有步骤,正确配置了端口和安全组;然而,该项目在加载过程中似乎陷入了无限循环。在项目的控制台中,我可以确认代码执行时没有错误,因为所有日志都正确显示。

下面,我包含了负责运行服务器的代码。我想知道是否有任何错误或不兼容可能导致此问题,或者我在仪表板上做错了什么。

衷心感谢您的关注和支持。任何指导或建议将不胜感激。

我遵循标准程序,首先启动 Ubuntu AWS EC2 实例。然后,我设置了密钥对并使用自定义 TCP 端口 3000 配置了安全组。之后,我在实例上安装了 Node.js 并执行了代码。

这是我的 server.js 结构

// Initialize Globals
const globals = require("./globals")

const express = require("express")
const ejs = require("ejs")
const { auth, requiresAuth } = require("express-openid-connect")
const glob = require("glob")
const path = require("path")
const bodyParser = require("body-parser")
const http = require('http')

const database = require("../database");
require("dotenv").config();

module.exports = class Server {
  constructor(port) {
    this.app = express();
    this.port = port;
  
    this.app.set("view engine", "ejs");
    this.app.use(express.static("./public"));
    this.app.use(bodyParser.json());
    this.app.set("views", "./src/views");
    this.app.enable('trust proxy')
        

    this.app.use(
      auth({
        authRequired: false,
        auth0Logout: true,
        secret: process.env.SECRET,
        baseURL: process.env.BASEURL,
        clientID: process.env.CLIENTID,
        issuerBaseURL: process.env.ISSUERBASEURL,
        routes: {
          //login: true
        }
      })
    );
    
    this.app.use(function(request, response, next) {
      if (!request.secure) {
        return response.redirect("https://" + request.headers.host + request.url);
      }

      next();
    })

    this.app.use((req, res, next) => { this.handlerMiddleware(req, res, next,this.Schemas) })
    this.startDatabase();
  }

  startServer() {
    this.server = http.createServer(this.app)
    
    this.server.listen(3000, () => {
      this.startWebSocketServer()
      console.log("• WebServer Started!")
    });
  }
  
  startWebSocketServer() {
    const { Server } = require("socket.io")
    const io = new Server(this.server)
    
    this.onlineUsers = {}
    this.onlineRegisteredUsers = {}
    
    io.on('connection', (socket) => {
      socket.on("online", async({userId}) => {
        this.onlineUsers[socket.id] = userId
      })
      
      socket.on("disconnect", async() => {
        const userId = this.onlineUsers[socket.id]
        
        if(userId) {
          let user = await this.Schemas.users.get(userId)
          await this.Schemas.users.set(userId, { $set: { online: false } })
        }
        
        delete this.onlineUsers[socket.id]
      })
      
      socket.on("offline", async() => {
        const userId = this.onlineUsers[socket.id]
        
        if(userId) {
          let user = await this.Schemas.users.get(userId)
          await this.Schemas.users.set(userId, { $set: { online: false } })
        }
        
        delete this.onlineUsers[socket.id]
      })
    })
    
    console.log("• WebSocket Server Started!")
  }

  startDatabase() {

  }
  
  registerRouters() {
    glob("./routes/**/*.js", (er, files) => {
      files.forEach((file) => {
        const Router = require(path.resolve(file));
        const router = Router({ requiresAuth: requiresAuth, Schemas: this.Schemas });

        this.app.use(router.dir, router.Router);
      });
    });
    
    this.startServer()
  }
  
  registerTasks(Schemas) {
    const schedule = require("node-schedule")
    const resetTickets = schedule.scheduleJob('0 */12 * * *', async() => {
      console.log("[SERVER || Cron Job] Running 12hr tasks")
      await Schemas.users.updateMany({ $set: {"modules.coliseumTickets": 15} })
    })
    
    const worldBossSwitchOpenState = schedule.scheduleJob('0 */4 * * *', async() => {
      console.log(`[WORLDBOSS] Four hours passed, switching...`)
      const worldBoss = await Schemas.events.worldBoss.findOne({ id: 1 })
      await worldBoss.setRandomEnemy()
      await worldBoss.switchOpenState()
    })
  }
  
  handlerMiddleware(req, res, next, schemas) {
    const URL = req.url.toLowerCase()
    if(URL.includes("/img") || URL.includes("/css") || URL.startsWith("/api") || URL.startsWith("/callback")) return next();
    console.log(`[Handler Middleware] Path: ${URL}`)

    const User = req.oidc?.user
    if(!User) return next()
     
    schemas.users.findOne({ email: User.email }).then(async(user) => {
        if(!user) user = await schemas.users.new({ email: User.email })
        const isUserInBattle = await schemas.battles.findOne({ tamer: user.id })
        const userTutorialLevel = user.newAccount
        
        const whitelist = [1, 4]
        const isUserWhitelisted = whitelist.includes(user.id)
        await this.Schemas.users.set(user.id, { $set: { online: true } })
        
        //var ip = (req.headers['x-forwarded-for'] || req.connection.remoteAddress || '').split(',')[0].trim();
        if(!whitelist.includes(user.id)) return res.render("maintenance")
        
        if(URL.includes("adminbureau") && !isUserWhitelisted) return res.redirect("/")
      
        if(userTutorialLevel !== 0) {
          console.log(`[#${user.id}] ${user.username} - ${req.ip}`)
          await user.updateOne({ $set: {"ip.current": req.ip} })
          if(!user.ip.original) await user.updateOne({ $set: {"ip.original": req.ip} }) 
        }
          
        if(isUserInBattle && isUserInBattle.data.campaignId && URL !== `/battle/campaign/${isUserInBattle.data.stage}`) return res.redirect(`/battle/campaign/${isUserInBattle.data.stage}`)
        if(isUserInBattle && isUserInBattle.data.url && req.url !== isUserInBattle.data.url) return res.redirect(isUserInBattle.data.url)
      
        switch (userTutorialLevel) {
            case 0: {
                if (URL !== '/') return res.redirect('/')
                break
            }
            case 1: {
                if (URL !== '/me') return res.redirect('/me')
                break
            }
            case 2: {
                if (URL !== '/me') return res.redirect('/me')
                break
            }
            default: {
                return next()
                break
            }
        }

        return next()
    })
  }
};
回答如下:

您可以从另一个 Ec2 连接到您的应用程序服务器吗? 也许您正在尝试通过互联网连接,并且您的 Ec2 位于专用网络上,或者您的帐户可能启用了一些网络限制。

更多推荐

EC2 花费太长时间/拒绝连接

本文发布于:2024-05-31 07:15:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771408.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:太长   时间

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!