我第一次使用EC2实例,我有一个使用pm2运行我的节点应用的微实例
var express = require('express');
var app = express();
var path = require("path");
var PORT = process.env.PORT || 3000;
// Serve Static files
app.use(express.static(path.join(__dirname, 'public')));
app.listen(PORT);
console.log('%d App listening on %d', process.pid, PORT);
所以这将运行端口3000(这可以吗?)。所以我可以转到mypublicip:3000
并看到我的应用正在运行。
我想要做的是转到我的域名mydomainname.co.uk
并呈现该网站。域名是通过123 reg。
我已经设置了弹性IP,但不确定从何处开始。
答案 0 :(得分:2)
您需要遵循几个步骤来执行您所要求的操作。您需要做的第一件事是将您的域名与您的EC2实例相关联。
要做到这一点,您可以直接将123-reg中的A记录指向该弹性IP,或者(我建议这样做)将您的域名服务器指向您在AWS上的Route 53中创建的托管区域。执行后者的过程是here。
一旦完成,并且TTL已过期(意味着DNS服务器有机会更新其值),您可以通过尝试ssh {{1来测试您的域名设置是否正确使用你可能一直在使用的公共IP的恶意。
在那之后,或者在等待TTL过期时,你应该检查你的EC2实例的安全配置,以确保端口80是开放的(因为我假设你还没有想要打扰安装SSL证书)。
如果您真的想在此时运行您的节点应用程序,使用pm2,您接下来需要设置Authbind以允许pm2用户启动侦听受限端口的进程。从命令行:
your-username@your-domain.co.uk
然后添加到.bashrc文件中:
$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chown %user% /etc/authbind/byport/80
$ sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update
好的,所以上面的内容可以帮助您了解您在问题中提出的问题。不过,我有一些笔记。
1)请不要按照我在Authbind上的最后一条说明进行操作。让非root用户(甚至在受控级别)启动端口80上的任务是一个非常非常糟糕的习惯。只需安装并配置nginx作为应用程序的反向代理。这是正确的做法,并不是那么难。 This article已过时,但涵盖了许多非常有用的理由,我仍然会回到它作为参考。
2)我提到使用Route 53.这有三个原因。首先,为所有配置内容(您的AWS控制台)而不是两个(AWS + reg-123)更容易拥有一个位置。其次,我从未使用过reg-123,但是53号网站比大多数域名卖家DNS设置网络应用程序更容易使用。第三,它比大多数更进一步,让你做一些事情,比如设置穷人的负载平衡和其他规则,这些规则在你的应用程序生命周期的后期很有用。
希望有所帮助。
答案 1 :(得分:0)
如果您只是在寻找临时解决方案,那么如果您使用80
或http
使用443
,则可以在端口https
上启动服务器并在安全组中打开此端口。现在,您可以mydomainname.co.uk
而不是mydomainname.co.uk:3000
访问您的网站。
如果您要设置一个供所有人使用的应用程序,则建议不要使用上述方法。在这种情况下,您应该使用nginx反向代理或使用端口转发,并将该实例上的3000端口指向80。
请注意,如果您在Linux上使用端口80,则需要执行sudo npm start
而不是通常的npm start
来启动服务器,因为1-1024端口称为管理端口而您只能使用超级用户/ root权限使用这些端口。
这就是我建议您在生产环境中使用端口转发或nginx反向代理的原因,因为如果没有这些方法,您将以超级用户权限运行您的应用程序,如果出现问题可能会造成严重损害,也可能存在一些安全问题,但我不知道到底是什么。
链接: