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

Cos*_*sta 13 couchdb amazon-ec2 amazon-web-services node.js

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

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

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

Dan*_*iel 32

有多种方法可以解决这个问题.

不同的端口

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

多个IP地址

您可以在一个EC2实例上使用多个IP地址,但是,它们每个月的额外成本约为3.65美元.因此,如果您想要在一次实例上托管10个不同的域名,那么每月额外收取超过30美元的托管费用.

另一方面,使用SSL的任何域都需要它自己的IP地址.

此外,您可以为实例分配的IP地址数量限制,实例越小,您获得的IP地址就越少.

您可以分配的IP地址数量因实例类型而异.小型实例最多可容纳8个IP地址(跨2个弹性网络接口),而高内存四倍超大型和群集计算机八个超大型实例最多可分配240个IP地址(跨8个弹性网络接口).有关IP地址和弹性网络接口限制的更多信息,请转到Amazon EC2用户指南中的实例系列和类型.

快速Vhosts

Express附带虚拟主机功能.您可以在一个Node.js/Express服务器下运行多个域,并根据域名设置路由. vhost在Express下启用此功能.

反向代理

您可以在多个应用程序服务器前设置Nginx.这具有最大的灵活性.每个域可以有一个Node.js进程,允许您一次在一个域上进行更新和重新启动.它还允许您在Node.js进程旁边的相同EC2实例下托管Apache/PHP等应用程序服务器.

使用Nginx作为反向代理,您还可以在同一域下托管不同的应用程序服务器,但服务于不同的路径.

例如,Node.js可以提供域的主根路径,但您可以设置/blog/路径以转到同一EC2实例上的Apache/PHP/Wordpress设置.

  • 有关多重IP的更新答案. (2认同)

Bal*_*i M 5

已经回答@ /sf/answers/3537000631/,但再次提及。

添加到 @Daniel 答案中,我想为那些正在寻找实现它的确切语法的人提及我的 nginx 的配置。

server {
  listen 80;
  server_name mysite.com;
  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  Host       $http_host;
    proxy_pass        http://127.0.0.1:3000;
  }
}
server {
  listen 80;
  server_name api.mysite.com;
  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  Host       $http_host;
    proxy_pass        http://127.0.0.1:4500;
  }
}
Run Code Online (Sandbox Code Playgroud)

只需创建两个具有唯一服务器名称和端口地址的服务器对象。

注意每个对象中的 proxy_pass 。

谢谢。