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

Node.js EC2实例上的节点js应用程序-域名,node.js,amazon-web-services,amazon-ec2,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(POR

我第一次使用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,但不确定从这里开始该怎么办。

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

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

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

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

链接:


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

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

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

    在这之后,或者在等待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设置web应用更容易使用。第三,它比大多数应用程序更进一步,允许您执行诸如设置poor man的负载平衡和其他规则之类的操作,这些规则在应用程序生命周期的后期非常有用

    希望有帮助