EC2实例上的Node.js应用程序-域名



我第一次使用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注册购买的

我已经设置了弹性IP,但不确定从这里去哪里。

您需要遵循以下几个步骤来完成您的要求。您需要做的第一件事是将域名与EC2实例相关联。

要做到这一点,您可以将123 reg中的A记录指向该弹性IP,或者(我建议这样做)将您的域名服务器指向您在AWS上的Route 53中创建的托管区域。完成后者的步骤如下。

一旦完成,并且TTL已经过期(这意味着DNS服务器有机会更新它们的值),您可以通过尝试使用您可能一直在使用的公共IP sshyour-username@your-domain.co.ukvice来测试您的域名设置是否正确。

之后,或者在等待TTL到期时,您应该检查EC2实例的安全配置,以确保端口80处于打开状态(因为我认为您还不想麻烦安装SSL证书)。

如果你现在真的想使用pm2运行你的节点应用程序,你接下来需要设置Authbind,允许pm2用户启动一个在受限端口上侦听的进程

$ 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

然后添加到你的.bashrc文件:

alias pm2='authbind --deep pm2'

好的,以上内容应该会让你明白你的问题。不过,我有一些注意事项。

1) 请不要按照我上次关于Authbind的指示进行操作。让非root用户(即使是在受控级别)在端口80上启动任务是一个非常非常坏的习惯。只需将nginx安装并配置为应用程序的反向代理即可。这是正确的方法,也没那么难。这篇文章已经过时了,但涵盖了很多非常有用的地方,我仍然可以回去参考。

2) 我提到使用53号公路。这有三个原因。首先,将所有配置文件(AWS控制台)放在一个位置比放在两个位置(AWS+reg-123)更容易。其次,我从未使用过reg-123,但Route 53比大多数域名卖家的DNS设置网络应用程序更容易使用。第三,它比大多数规则更进一步,可以让您执行诸如设置穷人的负载平衡和其他规则之类的操作,这些规则在应用程序的生命周期后期很有用。

希望能有所帮助。

如果您只是在寻找一个临时解决方案,那么如果您使用http,则可以在端口80上启动服务器;如果您使用的是https,则可以启动端口443,并在安全组中打开此端口。现在您可以访问您的网站mydomainname.co.uk而不是mydomainname.co.uk:3000

如果你正在设置一个人人都能使用的应用程序,那么不建议使用上述方法。在这种情况下,你应该使用nginx反向代理或使用端口转发,并将该实例上的3000端口指向80。

请注意,如果您使用的是端口80,那么在Linux上,您需要使用sudo npm start而不是通常的npm start来启动服务器,因为1-1024端口被称为管理端口,您只能使用超级用户/根权限使用这些端口。

这就是我建议你在生产环境中使用端口转发或nginx反向代理的原因,因为如果没有这些方法,你将使用超级用户权限运行你的应用程序,如果出现问题,可能会造成严重损坏。此外,可能会有一些安全问题,但我不知道具体是什么。

链接:

  1. 在生产环境中设置Nodejs

最新更新