(使用phusion乘客+ Nginx)运行相同的轨道应用与多个实例名称相同的端口(80)

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

嗨,我有一个使用轨道上的ruby开发的产品,将在32 GB RAM和8核心服务器处理器的专用服务器主机。 每个客户端应该有独立的DB和单独的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 

我的问题是如何映射与端口80的所有实例与适当的相同的子域

如果我访问

www.client4.product.com ,我需要得到应用程序运行在港口3004

更新:

任何人都可以请为phusion乘客+ Nginx的上述情况发布步骤

这里是一个nginx +乘客的最小服务器块示例

 server { listen 80; server_name client1.foobar.com; root /var/www/rails/client1/current/public; passenger_enabled on; } 

配置nginx的常用方法是创建一个子目录“sites-available”,在其中放置一个名为“client1.foobar.com”的文件,其中包含此代码段,然后在另一个名为“sites-enabled”的子目录中为此文件建立一个符号链接。 。 最后你在http块里面加nginx.conf里面的这一行

 include /path/to/your/sites-enabled/*; 

不要忘记重新加载/重新启动你的nginx。

通过这种使用符号链接的方式,您可以通过删除符号链接轻松禁用任何您想要的站点,而不会丢失配置文件。

你可以在这里找到一些例子和更多的文档: http : //www.modrails.com/documentation/Users%20guide%20Nginx.html

使用Phusion Passenger + Apache,实现你想要的最简单的方法就是使用VHOST。

只需在不同的文件夹中签出你的项目:

  • 在/ var / WWW /导轨/客户端1 /
  • 在/ var / WWW /导轨/ CLIENT 2 /
  • 在/ var / WWW /导轨/ client3 /
  • 在/ var / WWW /导轨/ client4 /

然后为/etc/apache2/sites-available/client1.foobar.com中的每个客户端创建一个VHOST文件

 <VirtualHost *:80> serverName client1.foobar.com DocumentRoot /var/www/rails/client1/current/public <Directory /var/www/rails/client1/current/public> Allow from all Options -MultiViews </Directory> </VirtualHost> 

然后,您将VHOST添加到托管域名列表a2ensite client1.foobar.com

你重新加载Apache /etc/init.d/apache2重新加载

我假设你使用capistrano进行部署,这就是为什么我添加了“当前”文件夹,但如果你不这样做,那就删除那部分(并且真的考虑采用capistrano)

我也认为你的服务器是一个Linux的盒子,但如果它不只是阅读关于重新加载配置和添加一个新的VHOST(真的想想有一个Linux服务器)的Apache文档,

PS:呵呵,如果你不使用capistrano并且更新你的代码库,不要忘了触摸你的app目录里的“tmp / restart”文件告诉乘客重新启动rails进程。 但是不要尝试在生产中使用“rails server”命令;)