18

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

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

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

4

2 回答 2

39

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

不同的端口

您可以在不同的端口上运行每个 Node.js 进程,然后简单地向世界开放这些端口。但是,您的 URL 需要在每个项目的主机名末尾添加一个端口。 yoururl.com:8080/在技​​术上可以工作,但可能不是你想要的。

多个 IP 地址

您可以在一个 EC2 实例上使用多个 IP 地址,但是,每个实例需要支付大约 3.65 美元的额外费用。因此,如果您想在一个实例上托管 10 个不同的域,那么每月额外的托管费用超过 30 美元。

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

此外,您可以分配给实例的 IP 地址数量也有限制,并且实例越小,您获得的 IP 地址就越少。

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

快递虚拟主机

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

反向代理

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

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

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

于 2013-05-14T17:21:27.797 回答
3

已经回答@ https://stackoverflow.com/a/50528580/3477353但再次提及。

添加到@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;
  }
}

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

注意每个对象中的 proxy_pass。

谢谢你。

于 2018-05-25T11:53:45.503 回答