(使用phusion passenger + Nginx)运行具有相同端口的多个实例名称的相同rails应用程序(80)

时间:2012-06-30 08:43:04

标签: ruby-on-rails nginx passenger virtualhost

注意:我是ruby on rails和服务器托管的新手,我无法表达我的愿景作为问题,请原谅我,如果我错了或纠正我。

嗨,我有一个使用ruby on rails开发的产品,将在一个拥有32 GB Ram和8 Core Server Processor的专用服务器上托管。每个客户端都应该有单独的数据库和单独的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

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

如果我访问

www.client4.product.com,我需要让应用程序在端口3004中运行

更新

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

2 个答案:

答案 0 :(得分:3)

使用Phusion Passenger + Apache,实现目标的最简单方法是使用VHOST。

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

  • 的/ var / WWW /轨道/客户端1 /
  • 的/ var / WWW /轨道/客户端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 reload

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

我还认为你的服务器是一个linux盒子,但如果它不只是阅读关于重新加载配置并添加新的VHOST(并且真的考虑拥有一个linux服务器)的apache文档

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

答案 1 :(得分:3)

以下是nginx + passenger

的最小服务器块的示例示例
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”的子目录中为该文件创建一个符号链接 - 启用”。最后,在http块

中的nginx.conf中添加以下行
include /path/to/your/sites-enabled/*;

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

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

您可以在此处找到一些示例和更多文档:http://www.modrails.com/documentation/Users%20guide%20Nginx.html