Express 为什么我不能访问AWS EC2实例上的nodejs应用程序?

Express 为什么我不能访问AWS EC2实例上的nodejs应用程序?,express,iis,amazon-ec2,url-rewrite-module,windows-server-2019,Express,Iis,Amazon Ec2,Url Rewrite Module,Windows Server 2019,我目前正在尝试在AWS EC2 Windows Server 2019实例上部署node js应用程序。我已经完成了克隆git repo和启动应用程序的工作,并且可以在EC2实例中访问它 为了使我的节点应用程序可以访问,我使用了Internet信息服务(IIS)管理器,并在默认网站下添加了该应用程序。我添加了URL重写模块,并添加了如下入站规则: 我可以通过其“公共DNS(IPv4)”访问EC2实例,该实例显示默认IIS模板: 但是,只要我向路径添加诸如“/app”、“:3000/app”或“

我目前正在尝试在AWS EC2 Windows Server 2019实例上部署node js应用程序。我已经完成了克隆git repo和启动应用程序的工作,并且可以在EC2实例中访问它

为了使我的节点应用程序可以访问,我使用了Internet信息服务(IIS)管理器,并在默认网站下添加了该应用程序。我添加了URL重写模块,并添加了如下入站规则:

我可以通过其“公共DNS(IPv4)”访问EC2实例,该实例显示默认IIS模板:

但是,只要我向路径添加诸如“/app”、“:3000/app”或“/app:3000”之类的内容,我就会收到“500”或“404”错误。访问我的应用程序的正确路径是什么

我尝试过的其他事情:

安全小组

我在谷歌上搜索了一下,大多数线程建议检查EC2实例的安全组,这就是我所做的。以下是我当前安全组的屏幕截图:

港口

我的.env文件不包含端口,这就是我希望应用程序使用硬编码端口3000的原因。为了确保通过
listener.address().port打印端口,它使用3000

app.js文件如下所示:

const express = require("express")
const path = require("path")
const router = require("./router/auth.routes")
const bodyParser = require("body-parser")
const cookieParser = require("cookie-parser")
const passport = require("passport")
const winston = require('./config/winston')
const { initialiseAuthentication } = require("./auth")
const { connectToDatabase } = require("./database/connection")
require("dotenv").config()

/**
 * App Variables
 */
const app = express()
const port = process.env.PORT || 3000

/**
 * App Configuration
 */
app.use(compression())
app.set("views", path.join(__dirname, "views"))
app.set("view engine", "pug")                         
app.use(express.static(path.join(__dirname, "public")))
app.use(express.json())                                
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cookieParser())
app.use(passport.initialize())                     
initialiseAuthentication(app)

/**
 * Routes Definition
 */
app.use('/', router)

async function establishConnection() {
  await connectToDatabase()
    .then(() => winston.log('info', 'Connection to database established.'))
    .catch(err => {
        winston.log('warn', 'Retrying')       
        setTimeout(establishConnection, 2000)
    })
}

/**
 * Server Activation
 */
app.listen(port, () => {
    establishConnection()
  })

有什么建议吗?我目前被困在这里,因为这是我第一次使用nodejs应用程序设置EC2实例。

该应用程序正在侦听您的“公共DNS(IPv4)”吗?
为了使应用程序可以访问,它必须准备好通过端口3000或“.”侦听通过公共DNS(IPv4)发送的请求。

即使.env不包含端口,您也应该尝试在侦听方法中将端口设置为3000。我尝试了两种方法,包括和不包括process.env.port。不起作用。我也在aws ec2实例上设置了一个节点服务器,但我总是将端口硬编码到其中。为什么不在env文件本身中设置一个端口,然后在实例本身上为其指定一个goIf,然后尝试打印端口。这可能是一个安全问题,我认为这就是URL重写模块的用途。我是根据本教程做的:根据本教程,我不需要更改应用程序本身的任何内容。访问我的URL将显示默认的IIS模板2。访问我的URL/应用程序显示500错误3。将URL重写规则/应用添加到“localhost:3000§应解决2 4中的错误。访问我的URL/应用程序现在应该显示正在EC2实例上运行的应用程序。但是它没有显示。@paaax是的,应用程序不是问题所在。你需要在windows服务器上设置一个代理,将请求重定向到正在运行的应用程序,这就是我使用IIS的原因。我完全按照教程中描述的那样做了