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

时间:2014-04-01 01:40:03

标签: amazon-web-services amazon-ec2

这可能与此问题有关:How to run more than one app on one instance of EC2

但这个问题似乎只是在讨论多个node.js应用程序。

我正在尝试学习几个不同的东西,所以我正在构建不同的网站来学习Ruby on Rails,LAMP和node.js.连同我的个人网站和博客。

有没有办法在同一个EC2实例上运行所有这些?

2 个答案:

答案 0 :(得分:5)

首先,没有关于在一个盒子上设置多个Web应用程序的EC2特定内容。您将要在“反向代理”模式下使用nginx(或Apache)。这样,Web服务器侦听端口80(和443),您的应用程序在各种其他端口上运行。每个传入请求都会读取“Host”标头,以将请求映射到后端。因此,不同的DNS名称/域显示不同的内容。

以下是如何在反向代理模式下设置nginx:http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html

对于每个“后端”应用,您需要:

1)分配一个端口(本例中为3000)

2)写一个upstream节,告诉它你的应用程序在哪里

3)编写一个(虚拟)server节,从服务器名称映射到上游位置

例如:

upstream app1  {
      server 127.0.0.1:3000; #App1's port
}

server {
    listen       *:80;
    server_name  app1.example.com;

    # You can put access_log / error_log sections here to break them out of the common log.

    ## send request to backend
    location / {
     proxy_pass              http://app1;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

我更喜欢在Apache面前安装Nginx有两个原因:1)nginx可以提供内存少得多的静态文件,2)nginx缓冲数据到客户端/从客户端缓冲数据,因此慢速互联网连接的人不会堵塞你的后端。

测试配置时,使用nginx -s reload重新加载配置,使用curl -v -H "Host: app1.example.com" http://localhost/从配置中测试特定域

答案 1 :(得分:0)

添加@Brave答案,我想提一下我的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

谢谢。