我的问题是如何使用Debian 6下的Phusion Passenger + Nginx将所有具有端口80的实例与适当的相同子域映射到以下场景。
注意:我是ruby on rails和服务器托管的新手,我无法表达我的愿景作为问题,请原谅我,如果我错了或纠正我。
嗨,我有一个使用ruby on rails开发的产品,将在一个拥有32 GB Ram和8 Core Server Processor的专用服务器上托管。每个客户端都应该有单独的数据库和单独的rails实例。我正在复制 - 为每个客户端复制代码,使用单独的文件夹并提供不同的数据库名称,因此每个客户端都用作不同的实例。基本上所有客户端的源代码都是相同的,但只有数据库名称不同,所以我将源代码放入不同的文件夹,并为每个客户端盯着一个单独的rails应用程序。
例如:
我有一个主要的临时域名
www.product.com
对于每个客户端,我需要将单独的子域映射到具有相同端口的相同服务器(80) 但使用不同的rails实例名称
www.client1.product.com
www.client2.product.com
www.clientn.product.com
据我所知,如果我启动rails实例,每个都将从单独的端口号
开始client1 with start at port 3001
client2 with start at port 3002
client3 with start at port 3003
我的问题是如何在Debian 6下使用Phusion Passenger + Nginx将所有具有端口80的实例与相应的相同子域映射
如果我访问
www.client4.product.com
,我需要让应用程序在端口3004中运行
答案 0 :(得分:1)
我希望你现在找到了解决方案,但是为了stackoverflow存档,我将提供一个答案。
通常意味着您应该使用反向代理(http://wiki.nginx.org/RubyonRailsMongrel)与nginx,而您的上游将是一个乘客|瘦|独角兽|美洲狮(挑选您喜欢的)服务器运行您的专用rails应用程序(我将使用重复的代码,以隔离您的客户端运行环境。)您将能够使用此方法提供负载平衡。
现在,您规定使用Passenger,如果您使用乘客延伸编译nginx,则可以使用非常简单的设置。 (转到http://www.modrails.com/documentation/Users%20guide%20Nginx.html以获得更好的解释)
server {
listen 80;
listen [::]:80 default_server ipv6only=on; # please for a better world be IPv6 compliant !
server_name www.client1.product.com;
root /my/rails/app1;
passenger_enabled on;
}
server {
listen 80;
listen [::]:80 default_server ipv6only=on;
server_name www.client2.product.com;
root /my/rails/app2;
passenger_enabled on;
}
.......