太长时间/拒绝连接"/>
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 花费太长时间/拒绝连接
发布评论