方法:每个VHost多个Rails应用程序 - 从Passenger RailsBaseURI迁移?

时间:2012-05-11 15:39:43

标签: ruby-on-rails nginx rack unicorn

我正在从apache / passenger迁移到nginx / unicorn。我已成功加载nginix并使用独角兽托管多个网站,但每个域只有一个。

在Passenger中,可以通过子文件夹在单个域下托管多个rails应用程序,并继续在root下托管单个html文件。例如:

<VirtualHost 10.0.0.2>
    ServerName preview.site.com
    ServerAlias preview.site.com

    DocumentRoot /var/www/com.site.preview

    <Directory /var/www/com.site.preview>
            AllowOverride all
            Options -MultiViews
    </Directory>

    RailsBaseURI /app-one
    RailsBaseURI /app-two
    RailsBaseURI /app-three

</VirtualHost>

所以转到

http://preview.site.com

会给我一个目录。去:

http://preview.site.com/app-one
http://preview.site.com/app-two
http://preview.site.com/app-three
而是会在该子文件夹下运行每个应用程序。我还能在nginx / unicorn中做到这一点吗?

How to make unicorn run a Rails 3.0 app under a path?上提出了类似的问题,但只提供了部分答案。

1 个答案:

答案 0 :(得分:0)

您需要做的是在nginx配置中定义locationsserver块定义运行它的端口的nginx应用程序,以及它侦听的URL。在该块中,添加以下内容:

location /app-one/ {
   proxy_set_header X-Real-IP  $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host $host;
   proxy_pass http://127.0.0.1:3000;
}

location /app-two/ {
   proxy_set_header X-Real-IP  $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host $host;
   proxy_pass http://127.0.0.1:4000;
}

location /app-three/ {
   proxy_set_header X-Real-IP  $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host $host;
   proxy_pass http://127.0.0.1:5000;
}

这假定如下:

  • 您的应用与nginx在同一个框中运行
  • 您的应用在上述三个端口上运行:3000,4000,5000

这种方法是反向代理,是Nginx最常见的用途之一。