EC2实例上的节点js应用程序 - 域名

时间:2017-02-09 11:47:50

标签: node.js amazon-web-services amazon-ec2

我第一次使用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,但不确定从何处开始。

2 个答案:

答案 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)

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

如果您要设置一个供所有人使用的应用程序,则建议不要使用上述方法。在这种情况下,您应该使用nginx反向代理或使用端口转发,并将该实例上的3000端口指向80。

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

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

链接:

  1. Setting up Nodejs in production environment