我有几个小型制作网站和一堆有趣的爱好者/实验性应用程序等。我想在一个EC2实例上运行所有这些。
我可以安装node.js,npm,express和couchdb一次,然后在不同的端口上运行每个应用程序,并调整我的域注册表中的DNS设置以指向适当的位置吗?
更新:谢谢迈克!对于在EC2上寻找多个IP地址的任何其他人:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html
答案 0 :(得分:32)
有很多方法可以解决这个问题。
您可以在不同的端口上运行每个Node.js进程,只需打开通向世界的端口即可。但是,您的URL在每个项目的主机名末尾都需要一个端口。 yoururl.com:8080/
在技术上可行,但可能不是你想要的。
您可以在一个EC2实例上使用多个IP地址,但是,它们每个月额外花费大约3.65美元。因此,如果您想要在一次实例上托管10个不同的域名,那么每月额外收取超过30美元的托管费用。
另一方面,任何使用SSL的域都需要它自己的IP地址。
此外,您可以为实例分配limits to the number of IP addresses,实例越小,您获得的IP地址就越少。
您可以分配的IP地址数量因实例类型而异。小型实例最多可容纳8个IP地址(跨2个弹性网络接口),而高内存四倍超大型和群集计算机八个超大型实例最多可分配240个IP地址(跨8个弹性网络接口)。有关IP地址和弹性网络接口限制的更多信息,请转到Amazon EC2用户指南中的实例系列和类型。
Express附带虚拟主机功能。您可以在一个Node.js / Express服务器下运行多个域,并根据域名设置路由。 Express下的vhost
可以实现此目的。
您可以在多个应用程序服务器前设置Nginx。这具有最大的灵活性。每个域可以有一个Node.js进程,允许您一次在一个域上进行更新和重新启动。它还允许您在Node.js进程旁边的同一EC2实例下托管Apache / PHP等应用程序服务器。
如果Nginx充当反向代理,您还可以在同一个域下托管不同的应用服务器,但服务于不同的路径。
例如,Node.js可以提供域的主根路径,但您可以设置/blog/
路径以转到同一EC2实例上的Apache / PHP / Wordpress设置。
答案 1 :(得分:1)
已经回答@ https://stackoverflow.com/a/50528580/3477353,但再次提到它。
添加@Daniel答案,我想提一下我的nginx的配置,以便那些正在寻找实现它的确切语法的人。
res.forEach(element => {
if (this.numbOfFinished === 1) {
if (element.key === 'firstExercise') {
console.log('has')
} else {
awardName = 'firstExercise'
this.homeService.addAward(this.userId, awardName).then(() => {
this.awardName = 'firstExercise';
this.awarded = true;
});
}
}
});
if (this.numbOfFinished === 5) {
if (element.key === 'fifthExercise') {
console.log('has')
} else {
awardName = 'fifthExercise'
this.homeService.addAward(this.userId, awardName).then(() => {
this.awardName = 'fifthExercise';
this.awarded = true;
});
}
}
});
只需创建两个具有唯一服务器名称和端口地址的服务器对象。
在每个对象中记住proxy_pass。
谢谢。