如何在一个EC2实例上运行多个应用程序

时间:2013-05-14 17:12:19

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

我有几个小型制作网站和一堆有趣的爱好者/实验性应用程序等。我想在一个EC2实例上运行所有这些。

我可以安装node.js,npm,express和couchdb一次,然后在不同的端口上运行每个应用程序,并调整我的域注册表中的DNS设置以指向适当的位置吗?

更新:谢谢迈克!对于在EC2上寻找多个IP地址的任何其他人:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html

2 个答案:

答案 0 :(得分:32)

有很多方法可以解决这个问题。

不同的端口

您可以在不同的端口上运行每个Node.js进程,只需打开通向世界的端口即可。但是,您的URL在每个项目的主机名末尾都需要一个端口。 yoururl.com:8080/在技术上可行,但可能不是你想要的。

多个IP地址

您可以在一个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 Vhosts

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。

谢谢。