这可能与此问题有关:How to run more than one app on one instance of EC2
但这个问题似乎只是在讨论多个node.js应用程序。
我正在尝试学习几个不同的东西,所以我正在构建不同的网站来学习Ruby on Rails,LAMP和node.js.连同我的个人网站和博客。
有没有办法在同一个EC2实例上运行所有这些?
答案 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 。
谢谢。