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

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

我是第一次使用 EC2 实例,我有一个微型实例,我的 Node 应用程序使用 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,但不确定从哪里开始。

最佳答案

您需要遵循几个步骤才能完成您所要求的操作。您需要做的第一件事是将您的域名与您的 EC2 实例关联起来。

为此,您可以将 123-reg 中的 A 记录指向该弹性 IP,或者(我建议这样做)将域的名称服务器指向您在 AWS 上的 Route 53 中创建的托管区域。执行后者的程序是 here

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

之后,或者在等待 TTL 过期期间,您应该检查 EC2 实例的安全配置,以确保端口 80 已打开(因为我假设您还不想安装 SSL 证书)。

如果此时您确实想使用 pm2 运行 Node 应用程序,那么您接下来需要设置 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 作为应用程序的反向代理即可。这是正确的方法,而且并不难。 This article虽然已经过时了,但涵盖了很多真正有用的内容,我仍然会回去引用。

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

希望有帮助。

关于node.js - EC2实例上的Node js应用程序-域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135920/

相关文章:

node.js - Typescript build "Cannot find module",但仅在 ubuntu 服务器上

amazon-web-services - AWS : create json template to create auto scaling group to create 2 EC2 instances

ios - 从 iOS 应用程序连接到 Amazon EC2 实例

linux - Amazon EC2 实例可用磁盘空间差异

javascript - 检查 Node 是否存在域名,如果不存在则返回 bool 值false,如果存在则返回域名

javascript - 如何构造一个 Promise 来调用其中的异步函数,解析结果,然后解析/拒绝?

javascript - 使用 https 命名空间时 createElementNS 无法正常工作

mysql - 在哪里可以找到 AWS RDS 快照主机名?

amazon-web-services - AWS Fargate 503 服务暂时不可用

linux - 如何在 ~/.aws/credential 文件中创建根凭证