Phusion Passenger + Nginx虚拟主机configuration,适用于Debian 6中的Ruby on Rails应用程序

我的问题是如何使用Debian 6下的Phusion Passenger + Nginx将具有适当的相同子域的端口80的所有实例映射到以下场景。

注:我是新手ruby在轨道上和服务器托pipe,我无法expression我的视野作为问题,请原谅我,如果我错了或纠正我。

嗨,我有一个使用轨道上的ruby开发的产品,将在32 GB RAM和8核心服务器处理器的专用服务器主机。 每个客户端应该有独立的DB和单独的rails实例。 我正在复制 – 为单独的文件夹复制每个客户端的代码,并给出不同的数据库名称,因此每个客户端都用作不同的实例。 基本上所有的客户端源代码是相同的,但只有数据库名称不同,所以我把源代码放到不同的文件夹,并作为一个单独的rails应用程序为每个客户端凝视。

例如:

我有一个主要的临时域

www.product.com 

对于每个客户端,我需要将单独的子域映射到具有相同端口(80)的相同服务器,但使用不同的rails实例名称

 www.client1.product.com www.client2.product.com www.clientn.product.com 

因为我知道如果我开始轨道实例,每个将开始在单独的端口号

 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

我希望你现在找到了解决方案,但为了stackoverflow存档,我会提供一个答案。

一般来说,你应该使用nginx使用反向代理( http://wiki.nginx.org/RubyonRailsMongrel ),而你的上游将是一个乘客(运行你最喜欢的)服务器,运行你的专用rails应用程序我将使用重复代码来隔离您的客户端运行环境。)您将能够使用此方法提供负载平衡。

现在,你规定了乘客的使用,如果你用乘客延伸来编译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; } 

…….